开发者社区 问答 正文

Android-SDK之如何实现管理文件(二)?


复制文件

// 创建copy请求CopyObjectRequest copyObjectRequest = new CopyObjectRequest("<srcBucketName>", "<srcObjectKey>","<destBucketName>", "<destObjectKey>");// 可选设置copy文件元信息// ObjectMetadata objectMetadata = new ObjectMetadata();// objectMetadata.setContentType("application/octet-stream");// copyObjectRequest.setNewObjectMetadata(objectMetadata);// 异步copyOSSAsyncTask copyTask = oss.asyncCopyObject(copyObjectRequest, new OSSCompletedCallback<CopyObjectRequest, CopyObjectResult>() {@Overridepublic void onSuccess(CopyObjectRequest request, CopyObjectResult result) {Log.d("copyObject", "copy success!");}@Overridepublic void onFailure(CopyObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {// 请求异常if (clientExcepion != null) {// 本地异常如网络异常等clientExcepion.printStackTrace();}if (serviceException != null) {// 服务异常Log.e("ErrorCode", serviceException.getErrorCode());Log.e("RequestId", serviceException.getRequestId());Log.e("HostId", serviceException.getHostId());Log.e("RawMessage", serviceException.getRawMessage());}}});
上述代码实现了CopyObject,注意:

  • 源Object和目标Object必须属于同一个数据中心。
  • 如果拷贝操作的源Object地址和目标Object地址相同,可以修改已有Object的meta信息。
  • 拷贝文件大小不能超过1G,超过1G需使用Multipart Upload操作。


删除文件

// 创建删除请求DeleteObjectRequest delete = new DeleteObjectRequest("<bucketName>", "<objectKey>");// 异步删除OSSAsyncTask deleteTask = oss.asyncDeleteObject(delete, new OSSCompletedCallback<DeleteObjectRequest, DeleteObjectResult>() {@Overridepublic void onSuccess(DeleteObjectRequest request, DeleteObjectResult result) {Log.d("asyncCopyAndDelObject", "success!");}@Overridepublic void onFailure(DeleteObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {// 请求异常if (clientExcepion != null) {// 本地异常如网络异常等clientExcepion.printStackTrace();}if (serviceException != null) {// 服务异常Log.e("ErrorCode", serviceException.getErrorCode());Log.e("RequestId", serviceException.getRequestId());Log.e("HostId", serviceException.getHostId());Log.e("RawMessage", serviceException.getRawMessage());}}});
上述代码实现了删除Object,注意:
  • DeleteObject要求对所在的Bucket有写权限。


只获取文件的元信息


下面的代码用于获取文件的元信息:// 创建同步获取文件元信息请求HeadObjectRequest head = new HeadObjectRequest("<bucketName>", "<objectKey>");OSSAsyncTask task = oss.asyncHeadObject(head, new OSSCompletedCallback<HeadObjectRequest, HeadObjectResult>() {@Overridepublic void onSuccess(HeadObjectRequest request, HeadObjectResult result) {Log.d("headObject", "object Size: " + result.getMetadata().getContentLength()); // 获取文件长度Log.d("headObject", "object Content Type: " + result.getMetadata().getContentType()); // 获取文件类型}@Overridepublic void onFailure(HeadObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {// 请求异常if (clientExcepion != null) {// 本地异常如网络异常等clientExcepion.printStackTrace();}if (serviceException != null) {// 服务异常Log.e("ErrorCode", serviceException.getErrorCode());Log.e("RequestId", serviceException.getRequestId());Log.e("HostId", serviceException.getHostId());Log.e("RawMessage", serviceException.getRawMessage());}}});// task.waitUntilFinished();

展开
收起
青衫无名 2017-10-18 13:50:27 1725 分享 版权
阿里云 AI 助理回答

您提供的代码示例涉及阿里云对象存储OSS(Object Storage Service)的几个基本操作:复制文件、删除文件以及获取文件元信息。下面我将对这些操作进行简要说明,并补充一些上下文信息,帮助您更好地理解和使用阿里云OSS服务。

复制文件

CopyObjectRequest copyObjectRequest = new CopyObjectRequest("<源Bucket名称>", "<源Object键>", "<目标Bucket名称>", "<目标Object键>");
// 可选:设置新Object的元信息
// ObjectMetadata objectMetadata = new ObjectMetadata();
// objectMetadata.setContentType("application/octet-stream");
// copyObjectRequest.setNewObjectMetadata(objectMetadata);
OSSAsyncTask copyTask = oss.asyncCopyObject(copyObjectRequest, new OSSCompletedCallback() {
    // 成功回调
    @Override
    public void onSuccess(CopyObjectRequest request, CopyObjectResult result) {
        Log.d("copyObject", "copy success!");
    }
    // 失败回调
    @Override
    public void onFailure(CopyObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        if (clientExcepion != null) {
            clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});

注意点: - 确保替换<源Bucket名称><源Object键><目标Bucket名称><目标Object键>为实际值。 - 源和目标Bucket必须位于同一数据中心。 - 若要修改目标文件的元信息,需设置setNewObjectMetadata方法。 - 文件大小限制为1GB,超过则需使用分段上传(Multipart Upload)。

删除文件

DeleteObjectRequest delete = new DeleteObjectRequest("<Bucket名称>", "<Object键>");
OSSAsyncTask deleteTask = oss.asyncDeleteObject(delete, new OSSCompletedCallback() {
    @Override
    public void onSuccess(DeleteObjectRequest request, DeleteObjectResult result) {
        Log.d("asyncCopyAndDelObject", "success!");
    }
    @Override
    public void onFailure(DeleteObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // 异常处理逻辑...
    }
});

注意点: - 替换<Bucket名称><Object键>为实际值。 - 执行删除操作的用户或角色需要拥有对应Bucket的写权限。

获取文件元信息

HeadObjectRequest head = new HeadObjectRequest("<Bucket名称>", "<Object键>");
OSSAsyncTask task = oss.asyncHeadObject(head, new OSSCompletedCallback() {
    @Override
    public void onSuccess(HeadObjectRequest request, HeadObjectResult result) {
        Log.d("headObject", "object Size: " + result.getMetadata().getContentLength());
        Log.d("headObject", "object Content Type: " + result.getMetadata().getContentType());
    }
    @Override
    public void onFailure(HeadObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // 异常处理逻辑...
    }
});
// 注意:在实际应用中,不推荐使用task.waitUntilFinished();因为它会阻塞当前线程直到任务完成。

注意点: - 正确填写<Bucket名称><Object键>。 - 通过HeadObjectResult可以获取到Object的多种元数据,如内容长度、内容类型等。

以上代码示例展示了如何使用阿里云OSS SDK进行文件管理的基本操作。请确保已正确配置OSS客户端(包括凭证认证等),并根据实际情况调整代码中的参数。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答