功能描述
用于开始分块上传文件。
接口说明
要求权限:
非 acl 鉴权:admin、space_admin 或 upload_file/upload_file_force/begin_upload/begin_upload_force。
acl 鉴权:canUpload(当前文件夹可上传)
分块上传指使用通过 HTTP PUT 请求上传一个文件的分块,通过多次上传完成整个文件的上传,每次请求的请求体为文件内容的单个分块。
调用该接口将返回一系列用于分块上传请求和确认上传完成的参数,上传的目标 URL 为 https://
{Domain}{Path}
?uploadId={UploadId}
&partNumber={PartNumber}
,其中 Domain 为响应体中的 domain 字段,Path 为响应体中的 path 字段,UploadId 为响应体中的 uploadId 字段,PartNumber 为从 1 开始的分块顺序,例如 https://examplebucket-1250000000.cos.ap-beijing.myqcloud.com/smhxxx/xxx.mp4?uploadId=xxx&partNumber=1
。上传每个分块时还需要指定一系列额外的请求头部字段,这些字段的名和值包含在响应体中的 headers 字段中。
当在浏览器使用 JS 上传文件时,需要提前在绑定的 COS 存储桶中设置跨域访问 CORS 设置。
在完成实际上传后,上传的目标 URL 将返回 HTTP 200 OK。
与对象存储的分块上传不同,SMH 的分块上传无需记录 ETag,也无需在完成上传时传入这些 ETag,只需保证上传分块的连续即可,SMH 将在完成上传时自动执行这些操作。
默认情况下同名文件将自动修改文件名,可在完成上传文件接口中获取最终的文件路径。
不会自动创建所需的各级父目录,所以必须保证路径的各级目录存在。
请求
请求示例
POST /api/v1/file/
{LibraryId}
/{SpaceId}
/{FilePath}
?multipart&conflict_resolution_strategy={ConflictResolutionStrategy}
&filesize={FileSize}
&access_token={AccessToken}
&user_id={UserId}
请求参数:
LibraryId:媒体库 ID,必选参数。
SpaceId:空间 ID,如果媒体库为单租户模式,则该参数固定为连字符(
-
);如果媒体库为多租户模式,则必须指定该参数。FilePath:完整文件路径,例如
foo/bar/file_new.docx
。FileSize:上传文件大小,单位为字节(Byte),用于判断剩余空间是否足够,可选参数。
ConflictResolutionStrategy:文件名冲突时的处理方式。
ask:冲突时返回 HTTP 409 Conflict 及 SameNameDirectoryOrFileExists 错误码。
rename:冲突时自动重命名文件。
overwrite:如果冲突目标为目录时返回 HTTP 409 Conflict 及 SameNameDirectoryOrFileExists 错误码,否则覆盖已有文件,默认为 rename。
AccessToken:访问令牌,必选参数。
UserId:用户身份识别,当访问令牌对应的权限为管理员权限且申请访问令牌时的用户身份识别为空时用来临时指定用户身份,详情请参阅 生成访问令牌接口,可选参数。
请求头部
x-smh-meta-*:自定义元数据。
请求体
该请求无请求体。
响应
响应码
上传任务创建成功,返回 HTTP 200 OK。
响应体
application/json
响应体示例:
{"domain": "examplebucket-1250000000.cos.ap-beijing.myqcloud.com","path": "/xxx","uploadId": "xxx","headers": {"Content-Type": "application/octet-stream","Authorization": "xxx","x-cos-security-token": "xxx"},"confirmKey": "xxx","expiration": "2021-07-24T10:34:32.000Z"}
响应体字段说明:
domain:字符串,实际上传文件时的域名。
path:字符串,实际文件上传时的 URL 路径。
headers:键值对,实际上传时需指定的请求头部。
confirmKey:字符串,用于完成文件上传的确认参数。
expiration:上传信息有效期,超过有效期后将失效,需要调用分块上传任务续期接口获取新的上传参数。