AlistGo/alist · error

upload failed, status: %d

Error message

upload failed, status: %d

What it means

Thrown by ILanZou's upload after the poll loop exited: the first result entry exists but its Status is not 1 (success). The numeric status is included. This is the server reporting the upload finished with a failure state (or the loop's iteration cap hit while status was still pending, leaving a non-1 status like 0).

Source

Thrown at drivers/ilanzou/driver.go:374

				"tokenTime=" + time.Now().Format("Mon Jan 02 2006 15:04:05 GMT-0700 (MST)"),
			}
			queryString := strings.Join(params, "&")
			req.SetQueryString(queryString).SetResult(&resp)
		})
		if err != nil {
			return nil, err
		}
		if len(resp.List) == 0 {
			return nil, fmt.Errorf("upload failed, empty response")
		}
		if resp.List[0].Status == 1 {
			break
		}
		time.Sleep(time.Second * 1)
	}
	file := resp.List[0]
	if file.Status != 1 {
		return nil, fmt.Errorf("upload failed, status: %d", resp.List[0].Status)
	}
	return &model.Object{
		ID: strconv.FormatInt(file.FileId, 10),
		//Path:     ,
		Name:     file.FileName,
		Size:     s.GetSize(),
		Modified: s.ModTime(),
		Ctime:    s.CreateTime(),
		IsFolder: false,
		HashInfo: utils.NewHashInfo(utils.MD5, etag),
	}, nil
}

//func (d *ILanZou) Other(ctx context.Context, args model.OtherArgs) (interface{}, error) {
//	return nil, errs.NotSupport
//}

var _ driver.Driver = (*ILanZou)(nil)

View on GitHub (pinned to 843d9dc814)

Solutions

  1. Retry the Put — transient server-side processing failures commonly resolve on a second attempt.
  2. Free account space / check quota if the status consistently maps to storage limits.
  3. Rename the file (remove characters the provider may reject) and retry.
  4. Raise the poll-iteration budget (or total wait) in the driver if the status is 0-pending rather than a hard failure code.
Defensive patterns

Strategy: retry

Try / catch

obj, err := d.Put(ctx, dstDir, stream, up)
if err != nil {
    if strings.Contains(err.Error(), "upload failed, status") && statusIsPending(err) {
        time.Sleep(3 * time.Second)
        obj, err = d.Put(ctx, dstDir, stream, up) // or re-poll results
    }
    if err != nil { return err }
}

Prevention

When it happens

Trigger: Server-side processing failure of the uploaded blob; upload quota exceeded; file content rejected by moderation; poll loop terminated while status was still 'processing' (0) so it never reached 1.

Common situations: Large files where server-side processing exceeds the poll budget; accounts at storage quota; files with names/content the provider rejects; slow server days where every upload ends in a non-1 status.

Related errors


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