使用s3client重命名s3上的文件名

1hdlvixo  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(673)

我尝试重命名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);
}
7fhtutme

7fhtutme1#

我找到了解决办法。在建筑商 CopyObjectRequest 我补充道 .metadataDirective(MetadataDirective.REPLACE) . 代码应该如下所示:

void updateFileName(String key, String newKey, String newName) {
CopyObjectRequest copyReq = CopyObjectRequest.builder()
        .copySource(bucket + "/" + key)
        .destinationBucket(bucket)
        .destinationKey(newKey)
        .contentDisposition("attachment; filename=" + newName)
        .metadataDirective(MetadataDirective.REPLACE)
        .build();

s3Client.copyObject(copyReq);}
kq4fsx7k

kq4fsx7k2#

官方的aws文档有一个名为“复制、移动或重命名对象”的部分,您可以在这里找到。
它指出:
您可以使用amazons3客户机的 copyObject 方法。它采用要从中复制的bucket的名称、要复制的对象和目标bucket的名称。
相关代码如下:

s3.copyObject(from_bucket, object_key, to_bucket, object_key);

您还可以在github上找到完整的示例。
需要注意的是,在awss3中,更新/重命名/移动对象的概念并不适用。SDK和其他更高级别的库可能会公开允许执行此类操作的API,但在一天结束时,您要么在更新时重写同一对象,要么在重命名/移动时编写新对象并删除旧对象。
我在上面链接的同一页的注解中也解释了这一点:
你可以用 copyObjectdeleteObject 要移动或重命名对象,请首先将对象复制到新名称(可以使用与源和目标相同的bucket),然后从旧位置删除对象。

相关问题