全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

分块上传(Android)

最近更新时间:2024-12-27 16:23:26

初始化分块上传

Ks3Client client = new Ks3Client("AccessKeyId", "SecretAccessKey", getApplicationContext());
client.setEndpoint("ks3-cn-beijing.ksyuncs.com");
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest("bucketName", "objectKey");
client.initiateMultipartUpload(request, new InitiateMultipartUploadResponseHandler() {
    @Override
    public void onSuccess(InitiateMultipartUploadRequest request, InitiateMultipartUploadResult result) {
        Log.i("Init Multipart Upload", "Status Code: " + result.getStatusCode());
        Log.i("Init Multipart Upload", "UploadId: " + result.getUploadId());
    }

    @Override
    public void onFailure(InitiateMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) {
        if (clientException != null) {
            Log.e("Init Multipart Upload", "ClientException: " + clientException.getMessage());
        }
        if (serviceException != null) {
            Log.e("Init Multipart Upload", "ServiceException: " + serviceException.getMessage());
        }
    }
});

上传块

Ks3Client client = new Ks3Client("AccessKeyId", "SecretAccessKey", getApplicationContext());
client.setEndpoint("ks3-cn-beijing.ksyuncs.com");
File file = new File("/root/test/file.txt");
UploadPartRequest request = new UploadPartRequest("bucketName", "objectKey", "uploadId", file, 0, 1, 1024 * 1024 * 5);
client.uploadPart(request, new UploadPartResponseHandler() {
    @Override
    public void onSuccess(UploadPartRequest request, UploadPartResult result) {
        Log.i("Upload Part", "Status Code: " + result.getStatusCode());
        Log.i("Upload Part", "PartNumber = " + result.getPartETag().getPartNumber() + ", ETag = " + result.getPartETag().geteTag());
    }

    @Override
    public void onTaskProgress(double progress) {
        Log.d("Upload Part", "Progress: " + progress);
    }

    @Override
    public void onFailure(UploadPartRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) {
        if (clientException != null) {
            Log.e("Upload Part", "ClientException: " + clientException.getMessage());
        }
        if (serviceException != null) {
            Log.e("Upload Part", "ServiceException: " + serviceException.getMessage());
        }
    }
});

列举已上传的块

Ks3Client client = new Ks3Client("AccessKeyId", "SecretAccessKey", getApplicationContext());
client.setEndpoint("ks3-cn-beijing.ksyuncs.com");
ListPartsRequest request = new ListPartsRequest("bucketName", "objectKey", "uploadId");
client.listParts(request, new ListPartsResponseHandler() {
    @Override
    public void onSuccess(ListPartsRequest request, ListPartsResult result) {
        StringBuilder stringBuilder = new StringBuilder();
        List<Part> parts = result.getParts();
        for (Part part : parts) {
            stringBuilder.append(part.getPartNumber()).append(" ").append(part.getETag()).append("\n");
        }
        Log.i("List Parts", "Status Code: " + result.getStatusCode());
        Log.i("List Parts", "Parts: " + stringBuilder.toString());
    }

    @Override
    public void onFailure(ListPartsRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) {
        if (clientException != null) {
            Log.e("List Parts", "ClientException: " + clientException.getMessage());
        }
        if (serviceException != null) {
            Log.e("List Parts", "ServiceException: " + serviceException.getMessage());
        }
    }
});

完成分块上传

Ks3Client client = new Ks3Client("AccessKeyId", "SecretAccessKey", getApplicationContext());
client.setEndpoint("ks3-cn-beijing.ksyuncs.com");
// 待合并的分块
List<PartETag> partETags = new ArrayList<PartETag>();
partETags.add(new PartETag(1, "ETag1"));
partETags.add(new PartETag(2, "ETag2"));
CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest("bucketName", "objectKey", "uploadId", partETags);
client.completeMultipartUpload(request, new CompleteMultipartUploadResponseHandler() {
    @Override
    public void onSuccess(CompleteMultipartUploadRequest request, CompleteMultipartUploadResult result) {
        Log.i("Comp Multipart Upload", "Status Code: " + result.getStatusCode());
    }

    @Override
    public void onFailure(CompleteMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) {
        if (clientException != null) {
            Log.e("Comp Multipart Upload", "ClientException: " + clientException.getMessage());
        }
        if (serviceException != null) {
            Log.e("Comp Multipart Upload ", "ServiceException: " + serviceException.getMessage());
        }
    }
});

取消分块上传

Ks3Client client = new Ks3Client("AccessKeyId", "SecretAccessKey", getApplicationContext());
client.setEndpoint("ks3-cn-beijing.ksyuncs.com");
AbortMultipartUploadRequest request = new AbortMultipartUploadRequest("bucketName", "objectKey", "uploadId");
client.abortMultipartUpload(request, new AbortMultipartUploadResponseHandler() {
    @Override
    public void onSuccess(AbortMultipartUploadRequest request, AbortMultipartUploadResult result) {
        Log.i("Abort Multipart Upload", "Status Code: " + result.getStatusCode());
    }

    @Override
    public void onFailure(AbortMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) {
        if (clientException != null) {
            Log.e("Abort Multipart Upload", "ClientException: " + clientException.getMessage());
        }
        if (serviceException != null) {
            Log.e("Abort Multipart Upload", "ServiceException: " + serviceException.getMessage());
        }
    }
});

分块上传代码示例

Ks3Client client = new Ks3Client("AccessKeyId", "SecretAccessKey", getApplicationContext());
client.setEndpoint("ks3-cn-beijing.ksyuncs.com");
File file = new File("/root/test/file.txt");
long partSize = 1024 * 1024 * 2;
MultipartUploadExample uploader = new MultipartUploadExample(client, "bucketName", "objectKey", file, partSize);
uploader.upload();

public class MultipartUploadExample {
    final private String TAG = "MultiUploadExample";
    private String bucketName;
    private String key;
    private File file;
    private long partSize = 5 * 1024 * 1024;
    private String uploadId;
    private Ks3Client client;
    final static private int STATE_UPLOAD_INIT = 0;
    final static private int STATE_UPLOAD_NEXT = 1;
    final static private int STATE_UPLOAD_COMPLETE = 2;
    final static private int STATE_UPLOAD_FAILED = 3;
    final private List<PartETag> uploadedParts = new ArrayList<>();
    UploadPartRequestFactory localUploadPartRequestFactory = null;

    private void create(Ks3Client client, String bucketName, String key, File file, long partSize) {
        this.client = client;
        this.bucketName = bucketName;
        this.key = key;
        this.file = file;
        this.partSize = partSize;
    }

    public MultipartUploadExample(Ks3Client client, String bucketName, String key, File file) {
        create(client, bucketName, key, file, partSize);
    }

    public MultipartUploadExample(Ks3Client client, String bucketName, String key, File file, long partSize) {
        create(client, bucketName, key, file, partSize);
    }

    private final UploadHandler handler = new UploadHandler();

    class UploadHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case STATE_UPLOAD_INIT:
                    initUpload();
                    break;
                case STATE_UPLOAD_NEXT:
                    uploadPart();
                    break;
                case STATE_UPLOAD_COMPLETE:
                    completeUpload();
                    break;
                case STATE_UPLOAD_FAILED:
                    Log.e(TAG, "upload failed");
                default:
                    break;
            }
        }
    }

    public void upload() {
        handler.sendEmptyMessage(STATE_UPLOAD_INIT);
    }

    private void initUpload() {
        InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, key);
        client.initiateMultipartUpload(request, new InitiateMultipartUploadResponseHandler() {
            @Override
            public void onSuccess(InitiateMultipartUploadRequest request, InitiateMultipartUploadResult result) {
                uploadId = result.getUploadId();
                localUploadPartRequestFactory = new UploadPartRequestFactory(bucketName, key, uploadId, file, partSize);
                Log.i(TAG, "init multipart upload success, uploadId=" + uploadId);
                handler.sendEmptyMessage(STATE_UPLOAD_NEXT);
            }

            @Override
            public void onFailure(InitiateMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) {
                if (clientException != null) {
                    Log.e(TAG, "init multipart upload fail, clientException=" + clientException.getMessage());
                }
                if (serviceException != null) {
                    Log.e(TAG, "init multipart upload fail, serviceException=" + serviceException.getMessage());
                }
                handler.sendEmptyMessage(STATE_UPLOAD_FAILED);
            }
        });
    }

    private void uploadPart() {
        if (localUploadPartRequestFactory.hasMoreRequests()) {
            UploadPartRequest request = localUploadPartRequestFactory.getNextUploadPartRequest();
            client.uploadPart(request, new UploadPartResponseHandler() {
                @Override
                public void onSuccess(UploadPartRequest request, UploadPartResult result) {
                    PartETag partETag = result.getPartETag();
                    partETag.setPartNumber(request.getPartNumber());
                    uploadedParts.add(partETag);
                    Log.i(TAG, "upload part success, partNumber=" + partETag.getPartNumber() + ", eTag=" + partETag.geteTag());
                    handler.sendEmptyMessage(STATE_UPLOAD_NEXT);
                }

                @Override
                public void onTaskProgress(double progress) {
                }

                @Override
                public void onFailure(UploadPartRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) {
                    if (clientException != null) {
                        Log.e(TAG, "upload part fail, clientException=" + clientException.getMessage());
                    }
                    if (serviceException != null) {
                        Log.e(TAG, "upload part fail, serviceException=" + serviceException.getMessage());
                    }
                    handler.sendEmptyMessage(STATE_UPLOAD_FAILED);
                }
            });
        } else {
            // 发送完成消息
            handler.sendEmptyMessage(STATE_UPLOAD_COMPLETE);
        }
    }

    private void completeUpload() {
        CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest(bucketName, key, uploadId, uploadedParts);
        client.completeMultipartUpload(request, new CompleteMultipartUploadResponseHandler() {
            @Override
            public void onSuccess(CompleteMultipartUploadRequest request, CompleteMultipartUploadResult result) {
                Log.i(TAG, "complete multipart upload success, status code=" + result.getStatusCode());
            }

            @Override
            public void onFailure(CompleteMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) {
                if (clientException != null) {
                    Log.e(TAG, "complete multipart upload fail, clientException=" + clientException.getMessage());
                }
                if (serviceException != null) {
                    Log.e(TAG, "complete multipart upload fail, serviceException=" + serviceException.getMessage());
                }
                handler.sendEmptyMessage(STATE_UPLOAD_FAILED);
            }
        });
    }
}

分块上传全流程的封装接口

Ks3Client client = new Ks3Client("AccessKeyId", "SecretAccessKey", getApplicationContext());
client.setEndpoint("ks3-cn-beijing.ksyuncs.com");
File file = new File("/root/test/file.txt");
long partSize = 1024 * 1024 * 5;
MultiUploader uploader = new MultiUploader(client, "bucketName", "objectKey", file, partSize);
uploader.setHandler(new CompleteMultipartUploadResponseHandler() {
    @Override
    public void onSuccess(CompleteMultipartUploadRequest request, CompleteMultipartUploadResult result) {
        Log.i("Multipart Upload", "Status Code: " + result.getStatusCode());
    }

    @Override
    public void onFailure(CompleteMultipartUploadRequest request, Ks3ClientException clientException, Ks3ServiceException serviceException) {
        if (clientException != null) {
            Log.e("Multipart Upload", "ClientException: " + clientException.getMessage());
        }
        if (serviceException != null) {
            Log.e("Multipart Upload", "ServiceException: " + serviceException.getMessage());
        }
    }
});
uploader.upload();

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈