拷贝(复制)文件

更新时间: 2020-03-24

目录

简单拷贝文件

自定义请求对象进行拷贝

本节介绍如何拷贝文件。

方式 参数指定方式 描述
简单拷贝 CopyObjectResult copyObject(String sourceBucketName, String sourceKey, String destinationBucketName, String destinationKey) 指定源存储通中的源文件向目标存储空间进行文件拷贝。拷贝后,目标文件的内容及元信息与源文件相同,属于简单拷贝。
通过CopyObjectRequest请求对象进行拷贝 CopyObjectResult copyObject(CopyObjectRequest copyObjectRequest) 将源存储桶中的指定版本号的源文件向目标存储桶进行拷贝,但是只拷贝文件内容,可以通过CopyObjectRequest设置目标文件的元数据信息和访问权限。

CopyObjectRequest可设置的参数如下:

参数 描述 方法
sourceBucketName 源存储空间名称。 setSourceBucketName(String sourceBucketName)
sourceKey 源文件名称。 setSourceKey(String sourceKey)
destinationBucketName 目标存储空间名称。 setDestinationBucketName(String destinationBucketName)
destinationKey 目标文件名称。 setDestinationKey(String destinationKey)
newObjectMetadata 目标文件元信息。 setNewObjectMetadata(ObjectMetadata newObjectMetadata)
cannedAccessControlList 文件的访问权限。 setCannedAccessControlList(CannedAccessControlList cannedAccessControlList)
sourceVersionId 指定版本号的源文件。 setSourceVersionId(String sourceVersionId)
metadataDirective 文件元数据需要进行的操作,如“REPLACE”等。 *setMetadataDirective(String metadataDirective)

简单拷贝文件

以下代码用于拷贝文件:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String sourceBucketName = "<yourSourceBucketName>";
String sourceKey = "<yourSourceKey>";
String destinationBucketName = "<yourDestinationBucketName>";
String destinationKey = "<yourDestinationKey>";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

//文件拷贝
CopyObjectResult copyObjectResult = ossClient.copyObject(sourceBucketName, sourceKey, destinationBucketName, destinationKey);
System.out.println(copyObjectResult.toString());

自定义请求对象进行拷贝

以下代码用于对拷贝文件进行操作:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String sourceBucketName = "<yourSourceBucketName>";
String sourceKey = "<yourSourceKey>";
String destinationBucketName = "<yourDestinationBucketName>";
String destinationKey = "<yourDestinationKey>";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

ObjectMetadata objectMetadata = new ObjectMetadata();
// 设置上传文件的长度。如超过此长度,则会被截断,为设置的长度。如不足,则为上传文件的实际长度。(目前还不支持)
objectMetadata.setContentLength(10L);
// 设置内容被下载时的名称
objectMetadata.setContentDisposition("test");
// 指定上传的内容类型。内容类型决定浏览器将以什么形式、什么编码读取文件。如果没有指定则根据文件的扩展名生成,如果没有扩展名则为默认值application/octet-stream
objectMetadata.setContentLanguage("text/plain");
// 设置内容被下载时网页的缓存行为
objectMetadata.setCacheControl("Download Action");
// 设置内容被下载时的编码格式
objectMetadata.setContentType("utf-8");
//设置用户自定义元数据,需要以""x-amz-meta-"开头
Map<String, String> userMap = new HashMap<>();
userMap.put("x-amz-meta-test1", "test1");
userMap.put("x-amz-meta-test2", "test2");
objectMetadata.setUserMetadata(userMap);

//设置源存储桶、源文件、目标存储同、目标文件
CopyObjectRequest copyObjectRequest = new CopyObjectRequest(sourceBucketName, sourceKey, destinationBucketName, destinationKey);

//设置目标文件的访问权限
copyObjectRequest.setCannedAccessControlList(CannedAccessControlList.PublicRead);

//设置元数据信息的操作方式
copyObjectRequest.setMetadataDirective("REPLACE");

//设置源文件的版本号,指定对应版本的文件进行拷贝
copyObjectRequest.setSourceVersionId("<yourObjectVersionId>");
copyObjectRequest.setNewObjectMetadata(objectMetadata);
ossClient.copyObject(copyObjectRequest);