AlistGo/alist · error

string(rsp)

Error message

string(rsp)

What it means

After CommitUploadUGC (VOD UGC upload commit), the driver expects the response to contain Data.Video.URL; when that field is empty it returns the ENTIRE raw response body as the error text (errors.New(string(rsp))). This is the 'show me the payload' style of error: the server accepted the HTTP call but the commit did not produce a video URL, so the driver dumps the body for diagnosis.

Source

Thrown at drivers/vtencent/util.go:179

	}
	return resps, nil
}

func (d *Vtencent) CommitUploadUGC(signature string, vodSessionKey string) (RspCommitUploadUGC, error) {
	api := "https://vod2.qcloud.com/v3/index.php?Action=CommitUploadUGC"
	form := base.Json{
		"signature":     signature,
		"vodSessionKey": vodSessionKey,
	}
	var resps RspCommitUploadUGC
	rsp, err := d.ugcRequest(api, http.MethodPost, func(req *resty.Request) {
		req.SetBody(form).ForceContentType("application/json")
	}, &resps)
	if err != nil {
		return RspCommitUploadUGC{}, err
	}
	if len(resps.Data.Video.URL) == 0 {
		return RspCommitUploadUGC{}, errors.New(string(rsp))
	}
	return resps, nil
}

func (d *Vtencent) FinishUploadMaterial(SummaryKey string, VodVerifyKey string, UploadContext, VodFileId string) (RspFinishUpload, error) {
	api := "https://api.vs.tencent.com/PaaS/Material/FinishUploadMaterial"
	form := base.Json{
		"UploadContext": UploadContext,
		"VodVerifyKey":  VodVerifyKey,
		"VodFileId":     VodFileId,
		"UploadFullKey": SummaryKey}
	var resps RspFinishUpload
	rsp, err := d.request(api, http.MethodPost, func(req *resty.Request) {
		req.SetBody(form).ForceContentType("application/json")
	}, &resps)
	if err != nil {
		return RspFinishUpload{}, err
	}

View on GitHub (pinned to 843d9dc814)

Solutions

  1. Retry the upload from scratch: re-run ApplyUploadUGC to get a fresh session, upload all parts, then commit once
  2. Verify the vtencent storage cookie/credentials are current before long uploads
  3. Inspect the dumped body in the error/log — it usually contains the real ErrorCode/Message explaining why no URL was produced
Defensive patterns

Strategy: fallback

Validate before calling

// before commit, confirm all parts are uploaded and session is fresh
if vodSessionKey == "" || !allPartsUploaded {
    return errors.New("upload incomplete — re-apply for a fresh session instead of committing")
}

Try / catch

res, err := d.CommitUploadUGC(signature, vodSessionKey)
if err != nil {
    if strings.Contains(err.Error(), "Video") || isRawBodyError(err) {
        // raw body surfaced: restart the whole UGC flow with a fresh ApplyUploadUGC
        return restartUploadFlow(ctx, stream)
    }
    return err
}

Prevention

When it happens

Trigger: /PaaS/UgcUpload/CommitUploadUGC (via ugcRequest) returning 200-style JSON whose Data.Video.URL is empty/missing — expired vodSessionKey, file not fully uploaded (missing chunks), server-side transcode failure, or a changed response schema.

Common situations: Slow upstream causing the upload session to time out before commit; Retrying a commit with a stale vodSessionKey after a previous partial attempt; Tencent changing the commit response shape in a driver-untested region or API version

Related errors


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