我尝试重命名aws驱动器上的文件名。我与aws的连接已配置。我准备了一段代码,应该用更改的文件名复制新文件,但它用未更改的文件名复制文件。
void updateFileName(String key, String newKey, String newName) {
CopyObjectRequest copyReq = CopyObjectRequest.builder()
.copySource(bucket + "/" + key)
.destinationBucket(bucket)
.destinationKey(newKey)
.contentDisposition("attachment; filename=" + newName)
.build();
s3Client.copyObject(copyReq);
}
2条答案
按热度按时间7fhtutme1#
我找到了解决办法。在建筑商
CopyObjectRequest
我补充道.metadataDirective(MetadataDirective.REPLACE)
. 代码应该如下所示:kq4fsx7k2#
官方的aws文档有一个名为“复制、移动或重命名对象”的部分,您可以在这里找到。
它指出:
您可以使用amazons3客户机的
copyObject
方法。它采用要从中复制的bucket的名称、要复制的对象和目标bucket的名称。相关代码如下:
您还可以在github上找到完整的示例。
需要注意的是,在awss3中,更新/重命名/移动对象的概念并不适用。SDK和其他更高级别的库可能会公开允许执行此类操作的API,但在一天结束时,您要么在更新时重写同一对象,要么在重命名/移动时编写新对象并删除旧对象。
我在上面链接的同一页的注解中也解释了这一点:
你可以用
copyObject
与deleteObject
要移动或重命名对象,请首先将对象复制到新名称(可以使用与源和目标相同的bucket),然后从旧位置删除对象。