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
- Retry the upload from scratch: re-run ApplyUploadUGC to get a fresh session, upload all parts, then commit once
- Verify the vtencent storage cookie/credentials are current before long uploads
- 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
- Treat a commit-without-URL as 'restart the flow', not 'retry the commit'
- Log the raw response body at error level for postmortem
- Complete uploads promptly; do not hold upload sessions across long idle periods
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
- message
- code
- 123 offline download cannot target the root directory, pick
- file_id is required
- same-name dirs cannot be Put
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/bffef297e3108565.
Report an issue: GitHub.