用途:实现浏览器到 Go 后端的可续传上传(TUS 1.0.x,基于 PATCH 与 Upload-Offset),适用于视频或大文件上传、断网后恢复。Next.js 不代理整个文件,浏览器直连 Go 服务。
主要能力:tusd 处理创建、HEAD、PATCH 及可选拼接;Gin 负责挂载、鉴权与 CORS;tus-js-client 在 App Router 的客户端组件中上传,支持分块、重试、findPreviousUploads 续传、进度与中止。PostFinish 后可触发后续处理(如 DASH 转码任务)。
使用方式:后端用 tusd.NewStoreComposer 配合 filestore.FileStore,NewHandler 设置 BasePath、NotifyCompleteUploads 与 PreUploadCreateCallback,再通过 gin.WrapH 与 http.StripPrefix 挂载到 /files,BasePath 与公开路径需一致。前端在 "use client" 组件中创建 Upload,endpoint 指向 Go 服务(如 NEXT_PUBLIC_TUS_ENDPOINT),设置 chunkSize、retryDelays、Authorization 头与 metadata,调用 findPreviousUploads 后 start。
限制与注意:创建(POST)与续传(PATCH/HEAD)都要鉴权;服务端校验 Upload-Length 与 MIME,不信任客户端;CORS 需允许并暴露 TUS 相关头,处理 OPTIONS 预检;一个上传对应一个不透明 ID,原始文件名只放 metadata;PostFinish 只更新状态并入队,不在钩子内转码;生产环境建议 S3 存储与跨实例锁,文件存储仅适合单节点或开发。资料未提供具体价格、平台支持范围与性能数据。