拷贝(复制)文件
更新时间: 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);