AlistGo/alist · error
wukong delete failed: code=%d message=%s
Error message
wukong delete failed: code=%d message=%s
What it means
Thrown by the Wukong driver's Remove after POSTing file_id_list to /netdisk/user_file/delete_file. The API accepted the HTTP request but returned a non-zero business code: the delete was refused. Usually the file_id is unknown (already deleted), the session is expired, or the account lacks delete permission.
Source
Thrown at drivers/wukong/driver.go:299
var resp rawResp
_, err := d.client.R().
SetContext(ctx).
SetQueryParams(map[string]string{
"aid": d.Aid,
"device_platform": "web",
"language": d.Language,
}).
SetBody(map[string]any{
"file_id_list": []any{asIDValue(fileID)},
}).
SetResult(&resp).
Post("/netdisk/user_file/delete_file")
if err != nil {
return err
}
if resp.Code != 0 {
return fmt.Errorf("wukong delete failed: code=%d message=%s", resp.Code, resp.Message)
}
return nil
}
func (d *Wukong) Put(ctx context.Context, dstDir model.Obj, file model.FileStreamer, up driver.UpdateProgress) error {
fatherID := dstDir.GetID()
if fatherID == "" {
fatherID = d.RootFolderID
}
tempFile, err := file.CacheFullInTempFile()
if err != nil {
return err
}
defer tempFile.Close()
if _, err = tempFile.Seek(0, io.SeekStart); err != nil {
return err
}View on GitHub (pinned to 843d9dc814)
Solutions
- Treat 'not exist' business codes as success (idempotent delete) by inspecting resp.Code/Message
- Refresh the listing before bulk delete so IDs are current
- Verify the driver's stored credential still works by calling a cheap read API; re-login if not
- Check the file is not owned by another account (shared-in item) before attempting delete
Example fix
// before
if err := d.Remove(ctx, obj); err != nil { return err }
// after
if err := d.Remove(ctx, obj); err != nil {
if strings.Contains(err.Error(), "not exist") { // map actual upstream code
return nil // already gone: idempotent
}
return err
} Defensive patterns
Strategy: try-catch
Validate before calling
if obj.GetID() == "" {
return errors.New("delete aborted: missing file id")
} Try / catch
if err := d.Remove(ctx, obj); err != nil {
if isWukongCode(err, codeNotExist) {
return nil // idempotent: already deleted remotely
}
return err
} Prevention
- Make bulk deletes idempotent by tolerating 'not exist' codes
- Refresh listings before bulk operations so IDs are current
- Verify write permission on shared folders before exposing delete in the UI
When it happens
Trigger: Deleting an object whose ID is stale because it was already removed in the Wukong web UI; deleting another user's shared file; deleting during an active upload/transfer of the same file; session cookie invalidated.
Common situations: Batch deletions from a cached listing where some entries vanished remotely; multi-tab usage where the web pan and the driver race; read-only shared folders mounted as writable.
Related errors
- wukong create directory failed: code=%d message=%s
- wukong move failed: code=%d message=%s
- wukong rename failed: code=%d message=%s
- wukong upload submit failed: code=%d message=%s
- wukong get upload auth token failed: code=%d message=%s
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/0802dab5979f7fa2.
Report an issue: GitHub.