目录

Files:update.patchresume

功能介绍

修改并准备断点续传。

场景描述

您的应用调用Files.update.resume接口进行初始化断点更新,对已有文件元数据进行增量更新,解析元数据,最终返回location以供Files.resume接口使用。

使用约束

接口原型

承载协议

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

路径参数

参数

是否必选

参数类型

描述

fileId

是

string

文件ID。

查询参数

参数

是否必选

参数类型

描述

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();
        }
    }