文件拷贝

SDK 提供Copy方法实现文件拷贝到当前Bucket的功能。

参数说明

参数名 类型 说明
dstKeyName string 拷贝到当前Bucket(即配置文件所配置bucket_name)后文件的KeyName
srcBucketName string 被拷贝文件所在的存储空间
srcKeyName string 被拷贝文件的KeyName

说明

  • 若当前Bucket已有key为dstKeyName的文件,则该操作会默认覆盖该文件,请谨慎操作。可先通过HeadFile进行判断。
  • 目前文件拷贝的srcBucketName可以是同一账号相同地域下不同子账号的任意Bucket

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class CopyObjectSample {
    private static final String TAG = "CopyObjectSample";
    private static ObjectConfig config = new ObjectConfig("cn-sh2", "ufileos.com");

    public static void main(String[] args) {
        String srcBucket = "";
        String srcKeyName = "";
        String dstBucket = "";
        String dstKeyName = "";
        copyObjectAsync(srcBucket, srcKeyName, dstBucket, dstKeyName);
    }

    public static void copyObject(String srcBucket, String srcKeyName, String dstBucket, String dstKeyName) {
        try {
            CopyObjectResultBean response = UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
                    .copyObject(srcBucket, srcKeyName)
                    .copyTo(dstBucket, dstKeyName)
                    /**
                     * 为云端对象配置自定义数据,每次调用将会替换之前数据。
                     * 所有的自定义数据总大小不能超过 8KB。
                     */
//                    .withMetaDatas()
                    /**
                     * 为云端对象添加自定义数据,可直接调用,无须先调用withMetaDatas
                     * key不能为空或者""
                     *
                     */
//                    .addMetaData(new Parameter<>("key","value"))
                    /**
                     * 配置用户自定义元数据设置方式
                     * 具体参数配置可见 {@link MetadataDirective}
                     */
//                    .withMetadataDirective(MetadataDirective.COPY)
                    .execute();
            JLog.D(TAG, String.format("[res] = %s", (response == null ? "null" : response.toString())));
        } catch (UfileClientException e) {
            e.printStackTrace();
        } catch (UfileServerException e) {
            e.printStackTrace();
        }
    }

    public static void copyObjectAsync(String srcBucket, String srcKeyName, String dstBucket, String dstKeyName) {
        UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
                .copyObject(srcBucket, srcKeyName)
                .copyTo(dstBucket, dstKeyName)
                /**
                 * 为云端对象配置自定义数据,每次调用将会替换之前数据。
                 * 所有的自定义数据总大小不能超过 8KB。
                 */
//                    .withMetaDatas()
                /**
                 * 为云端对象添加自定义数据,可直接调用,无须先调用withMetaDatas
                 * key不能为空或者""
                 *
                 */
//                    .addMetaData(new Parameter<>("key","value"))
                /**
                 * 配置用户自定义元数据设置方式
                 * 具体参数配置可见 {@link MetadataDirective}
                 */
//                .withMetadataDirective(MetadataDirective.COPY)
                .executeAsync(new UfileCallback<CopyObjectResultBean>() {

                    @Override
                    public void onResponse(CopyObjectResultBean response) {
                        JLog.D(TAG, String.format("[res] = %s", (response == null ? "null" : response.toString())));
                    }

                    @Override
                    public void onError(Request request, ApiError error, UfileErrorBean response) {
                        JLog.D(TAG, String.format("[error] = %s\n[info] = %s",
                                (error == null ? "null" : error.toString()),
                                (response == null ? "null" : response.toString())));
                    }
                });
    }

}

错误码

HTTP 状态码 RetCode ErrMsg 描述
400 -148653 bucket not exists 当前所操作存储空间不存在 或 源存储空间不存在
400 -15036 check md5 failed MD5校验失败
401 -148643 no authorization found 上传凭证错误
403 -148643 invalid signature API公私钥错误或者KeyName包含%、#、?
404 -148654 file not exist 源文件不存在