| 承载协议 | HTTP PATCH |
|---|---|
| 接口方向 | 开发者服务器->华为云空间服务器 |
| 接口URL | https://driveapis.cloud.huawei.com.cn/upload/drive/v1/files/{fileId}?uploadType=resume&fields=* |
| 数据格式 | 请求消息:Content-Type: application/json 响应消息:Content-Type: application/json |
| 参数 | 是否必选 | 参数类型 | 描述 |
|---|---|---|---|
| uploadType | 是 | string | 上传方式,固定值为resume |
| quotaId | 否 | string | 用户标识,小于40个字符。用于限制单个用户的API访问数量。 |
| addParentFolder | 否 | string | 逗号分隔的父目录ID列表,注意只取第一个,不支持多父目录,addParentFolder必须和removeParentFolder成对出现。 |
| removeParentFolder | 否 | string | 逗号分隔的父目录ID列表,注意只取第一个,不支持多父目录,addParentFolder必须和removeParentFolder成对出现。 |
| autoRename | 否 | string | 自动重命名,如果是true,或者不传,自动重命名;如果是false,则不会自动重命名。 |
Request Header
| 参数 | 是否必选 | 参数类型 | 描述 |
|---|---|---|---|
| Authorization | 是 | string | 用户鉴权信息 AccessToken(即AT) |
| X-Upload-Content-Type | 否 | string | 业务跟踪id。 |
| X-Upload-Content-Length | 是 | integer | 上传文件Content-Length。 |
| x-hw-trace-id | 否 | string | 业务跟踪id。 |
| x-hw-app-id | 否 | string | 应用的appid。 |
| x-hw-terminal | 否 | string | 终端型号。 |
| version | 否 | string | SDK版本。 |
| x-hw-os | 否 | string | 终端操作系统类型。 |
| unionID | 否 | string | 用户的unionID。 |
| User-Agent | 否 | string | 应用版本号/appid。 |
| x-hw-deviceUUID | 否 | string | 设备UUID。 |
| x-hw-deviceUDID | 否 | string | 设备UDID。 |
| x-hw-appPackageName | 否 | string | 应用包名。 |
| x-hw-network | 否 | string | 网络类型,[WiFi, 2G, 3G, 4G, 5G, wire]。 |
| Cookie | 否 | string | cookie中的loginId为会话ID,用于鉴权。 |
Request Body
| 参数 | 是否必选 | 参数类型 | 描述 |
|---|---|---|---|
| appSettings | 否 | string | 应用自定义属性。 |
| contentExtras.thumbnail.content | 否 | string | 缩略图,base 64编码。 |
| contentExtras.thumbnail.mimeType | 否 | string | 缩略图格式。 |
| writerHasCopyPermission | 否 | boolean | copy是否需要writer权限。 |
| createdTime | 否 | string | 文件创建时间。 |
| description | 否 | string | 文件描述。 |
| mimeType | 否 | string | 文件类型,具体取值参照公共说明。 |
| editedTime | 否 | string | 文件修改时间。 |
| fileName | 否 | string | 文件名。 |
| originalFilename | 否 | string | 原始文件名。 |
| parentFolder[] | 否 | string | 父目录,可填[root,applicationData,普通目录的id]。 |
| properties | 否 | string | 文件公共自定义属性。 |
| favorite | 否 | boolean | 文件是否被收藏。 |
| writersHasSharePermission | 否 | boolean | 写权限是否能分享。 |
| sha256 | 否 | string | 文件的sha256。 |
PATCH https://driveapis.cloud.huawei.com.cn/upload/drive/v1/files/DSQpEkxcAAADKXEPJAYABgEZivNwAmCu?uploadType=resume&fields=* HTTP/1.1
X-Upload-Content-Type: image/jpeg
X-Upload-Content-Length: 200000
Authorization: Bearer CV3PnPLZXyr9K2GV7RYZkF962JZvoEkMQhTho3QHQAPQUyma/lEyZskP/IMWrc7FvaeHivO7y0lyibI/fQvulBnTgtXArSVPsjaLKvYNkDsJSaIR2/sx+K40bYDWWpKFvJNKg2U47jRwz2mfiF3ortNk
Cache-Control: no-cache
{
"appSettings":{
"test1":"value1"
},
"contentExtras":{
"thumbnail":{
"content":"***",
"mimeType":"image/jpeg",
"thumbnailPublic":false
}
},
"writerHasCopyPermission":false,
"createdTime":"2019-11-14T07:53:24.953Z",
"description":"test test test zb",
"mimeType":"image/jpeg",
"editedTime":"2019-11-14T07:53:24.953Z",
"fileName":"1234.JPG",
"originalFilename":"3123.JPG",
"parentFolder":[
"/opt/test"
],
"properties":{
"test2":"value2"
},
"favorite":true,
"writersHasSharePermission":false
} 状态码为200时:
| 参数 | 参数类型 | 描述 |
|---|---|---|
| Location | string | 续传会话URI,其中的serverId为服务器ID,用于标识本次断点续传的服务器主机;形如:https://driveapis.cloud.huawei.com.cn/upload/drive/v1/{{serverId}}/file |
{
"sliceSize":4194304
}
Headers:
Location:https://driveapis.cloud.huawei.com.cn/upload/drive/v1/fc7300dbe0280d39/files?fields=*&uploadType=resume&uploadId=324314495017204480
Content-Type: application/json; charset=utf-8Content-Length: 21 错误码后4位为业务错误码,用于区分错误场景,其他业务错误码见状态码章节。
| 状态码 | 错误码 | 响应代码 | 描述 |
|---|---|---|---|
| 200 | NA | - | 成功。 |
| 400 | 21034001 | LACK_OF_PARAM | 缺少入参,请检查参数列表。 |
| 400 | 22034002 | PARAM_INVALID | 参数校验失败,请检查参数列表。 |
| 400 | 22234002 | PARAM_INVALID | 参数校验失败,请检查参数列表。 |
| 400 | 22084002 | PARAM_INVALID | 参数校验失败,请检查参数列表。 |
| 400 | 22034003 | PARAM_VALUE_NOT_SUPPORT | 无效参数,请检查参数列表。 |
| 400 | 22034004 | PARAM_EXPIRED | 参数不支持,请检查参数列表。 |
| 400 | 22054005 | SITE_NOT_FOUND | 站点信息未知。 |
| 400 | 22044002 | PARAM_INVALID | 参数校验失败,请检查参数列表。 |
| 401 | 22044011 | USER_NOT_AUTHORIZED | 用户鉴权失败。 |
| 403 | 22124031 | DATA_MIGRATING | 正处于安全策略更新, 请等待安全策略更新完成。 |
| 403 | 22124032 | SERVICE_NOT_SUPPORT | 服务未开放 |
| 403 | 22004032 | SERVICE_NOT_SUPPORT | 服务在当前国家/地区不支持。 |
| 403 | 22044033 | AGREEMENT_NOT_SIGNED | 协议未签署,请签署协议后再进行重试。 |
| 403 | 22054034 | CROSS_SITE_NOT_SUPPORT | 跨站点功能限制。 |
| 403 | 22234036 | INSUFFICIENT_PERMISSION | 无此操作权限。 |
| 403 | 22034038 | OUTER_SERVICE_ERROR | 外部服务错误且无法恢复。 |
| 403 | 22234038 | OUTER_SERVICE_ERROR | 外部服务错误且无法恢复。 |
| 403 | 22114039 | SPACE_FULL | 用户空间不足,请扩容或删除文件后再进行重试。 |
| 403 | 22234038 | OUTER_SERVICE_ERROR | 外部服务错误。 |
| 403 | 22044035 | INSUFFICIENT_SCOPE | Scope校验失败。 |
| 403 | 22234035 | INSUFFICIENT_SCOPE | Scope校验失败。 |
| 404 | 22234041 | CONTENT_NOT_FOUND | 内容未发现。 |
| 429 | 22074291 | USER_REQUEST_TOO_MANY | 用户请求太频繁。 |
| 429 | 22074292 | APP_REQUEST_TOO_MANY | 应用请求太频繁。 |
| 429 | 22034291 | USER_REQUEST_TOO_MANY | 用户续传初始化请求太频繁。 |
| 500 | 22035005 | RESOURCE_LOCKED | 文件被加锁。 |
| 500 | 22035004 | DATABASE_UNAVAILABLE | 读写数据库失败。 |
| 500 | 22005006 | SERVER_TEMP_ERROR | 服务器临时错误。 |
| 500 | 22045002 | OUTER_SERVICE_UNAVAILABLE | 外部服务不可用。 |
| 500 | 22235002 | OUTER_SERVICE_UNAVAILABLE | 外部服务不可用。 |
| 500 | 22085006 | SERVER_TEMP_ERROR | 服务器临时错误。 |
| 500 | 22085001 | SERVER_IS_BUSY | 服务器资源不够 |
| 500 | 22075002 | OUTER_SERVICE_UNAVAILABLE | 外部服务不可用 |
| 500 | 22125002 | OUTER_SERVICE_UNAVAILABLE | 外部服务不可用 |
public static void main(String[] args) throws IOException {
// 设置请求地址,文件ID和用户认证令牌
String url = "https://driveapis.cloud.huawei.com.cn/upload/drive/v1/files";
String fileId = "AACWO19qK7wAg6gA2-kVh4QNqAzb5CuwA";
String access_token = "CF3p+5TNdpCs0OjI+bP04rVLLe6WJpFWefKlASOzIaDArxxS36ku2TePpHUGzfJAW4C4YO06wB7eIhMdu/MEOsqAkWu0rpNmVcTUsVefUSmt5RUvhAr2oQ==";
// 修改文件信息并准备断点续传
String fileInfo = filesUpdatePatchresume(url, access_token, fileId);
if(fileInfo != null){
System.out.println(fileInfo);
}
}
private static String filesUpdatePatchresume(String url, String access_token, String fileId) throws IOException {
StringBuilder stringBuilder = new StringBuilder("");
stringBuilder.append("/").append(fileId);
stringBuilder.append("?").append("fields=*");
stringBuilder.append("&").append("uploadType=resume");
HttpPatch httpPatch = new HttpPatch(url + stringBuilder);
httpPatch.setHeader("Authorization","Bearer " + access_token);
httpPatch.setHeader("Content-Type", "application/json;charset=UTF-8");
httpPatch.setHeader("Accept", "*/*");
httpPatch.setHeader("X-Upload-Content-Length", "53");
JSONObject jsonParam = new JSONObject();
jsonParam.put("\"appSettings\"", "{ \"test1\": \"value1\" }");
StringEntity entity = new StringEntity(jsonParam.toString());
httpPatch.setEntity(entity);
CloseableHttpResponse response = HttpClientUtil.getClient().execute(httpPatch);
try {
if(response.getStatusLine().getStatusCode() == 200){
String ret = response.getHeaders("Location")[0].getValue();
return ret;
}
HttpEntity responseEntity = response.getEntity();
String ret = responseEntity != null ? EntityUtils.toString(responseEntity) : null;
JSONObject jsonObject = (JSONObject) JSON.parse(ret);
EntityUtils.consume(responseEntity);
return jsonObject.toJSONString();
}finally {
response.close();
}
}