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
- Ensure the client sends a valid filename in the multipart part / headers
- Set streamer Name from the actual file path base when constructing it programmatically
- 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
- Always set filename in multipart parts and headers
- Derive streamer names from filepath.Base when building programmatically
- Reject empty filenames at the API gateway before they reach drivers
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.