AlistGo/alist · warning

file name is empty

Error message

file name is empty

What it means

GuangYaPan Put trims the file name and rejects empty values before requesting an upload token, because the token request is parameterized by file name and the OSS object path is derived from it.

Source

Thrown at drivers/guangyapan/driver.go:389

	if taskID == "" {
		return nil
	}
	return d.waitTaskDone(ctx, taskID)
}

func (d *GuangYaPan) Put(ctx context.Context, dstDir model.Obj, file model.FileStreamer, up driver.UpdateProgress) error {
	if err := d.ensureAccessToken(ctx); err != nil {
		return err
	}
	if file == nil {
		return errors.New("file is nil")
	}
	if file.GetSize() < 0 {
		return errors.New("invalid file size")
	}
	name := strings.TrimSpace(file.GetName())
	if name == "" {
		return errors.New("file name is empty")
	}

	parentID := dstDir.GetID()

	token, code, err := d.getUploadToken(ctx, parentID, name, file.GetSize())
	if err != nil {
		return err
	}
	taskID := strings.TrimSpace(token.TaskID)
	if code == 156 {
		if taskID == "" {
			return errors.New("instant upload returns empty task id")
		}
		return d.waitUploadTaskInfo(ctx, taskID)
	}

	if token.ObjectPath == "" || token.BucketName == "" || token.EndPoint == "" || token.AccessKeyID == "" || token.SecretAccessKey == "" {
		return errors.New("upload token is incomplete")

View on GitHub (pinned to 843d9dc814)

Solutions

  1. Ensure the client sends a valid filename in the multipart part / headers
  2. Set streamer Name from the actual file path base when constructing it programmatically
  3. Validate name is non-empty after trimming before calling Put

Example fix

// before
stream := model.NewFileStream(&model.Obj{Name: ""}, r)
// after
name := filepath.Base(path)
if strings.TrimSpace(name) == "" || name == "." { return errors.New("filename required") }
stream := model.NewFileStream(&model.Obj{Name: name, Size: size}, r)
Defensive patterns

Strategy: validation

Validate before calling

name := strings.TrimSpace(file.GetName())
if name == "" {
	return errors.New("file name is required for upload")
}
return d.Put(ctx, dstDir, file, up)

Type guard

func hasFileName(f model.FileStreamer) bool { return f != nil && strings.TrimSpace(f.GetName()) != "" }

Prevention

When it happens

Trigger: Uploading a streamer whose GetName() is empty or whitespace-only — malformed multipart filename field, or a programmatically built streamer with an unset name.

Common situations: Clients omitting filename in multipart forms; scripts creating streamers with an empty Name field; files whose name resolves to only spaces.

Related errors


AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15). Data as JSON: /api/errors/d5938859b9f89ced. Report an issue: GitHub.