为了账号安全,请及时绑定邮箱和手机立即绑定

在php中的aws s3中将文件夹从一个复制到另一个

在php中的aws s3中将文件夹从一个复制到另一个

PHP
跃然一笑 2021-06-28 13:50:45
我正在尝试将一个文件夹复制到 aws s3 中的另一个文件夹,如下所示$s3 = S3Client::factory(    array(      'credentials' => array(        'key' => 'testbucket',        'secret' => BUCKET_SECRET //Global constant      ),      'version' => BUCKET_VERSION, //Global constant      'region'  => BUCKET_REGION  //Global constant    )  );$sourceBucket = 'testbucket';$sourceKeyname = 'admin/collections/Athena'; // Object key$targetBucket = 'testbucket';$targetKeyname = 'admin/collections/Athena-New';// Copy an object.$s3->copyObject(array(    'Bucket'     => $targetBucket,    'Key'        => $targetKeyname,    'CopySource' => "{$sourceBucket}/{$sourceKeyname}",));它抛出错误为致命错误:未捕获的异常“Aws\S3\Exception\S3Exception”,消息为“在“ https://testbucket.s3.us-east-2.amazonaws.com/admin/collections/Athena-New ”上执行“CopyObject”时出错; AWS HTTP 错误:客户端错误:PUT  https://testbucket.s3.us-east-2.amazonaws.com/admin/collections/Athena-New 导致404 Not Found响应: NoSuchKey指定的密钥不存在。admin/collections/AthenaNoSuchKey指定的密钥不存在。admin/collections/Athena29EA131A5AD9CB836OjDNLgbdLPLMd0t7MuNi4JH6AU5pKfRmhCcWigGAaTuRlq6MTXuRlq6MuNi4KfRmhCcWigGAaTuRlq6MTXi我不明白为什么它会生成错误的存储桶 url,例如https://testbucket.s3.us-east-2.amazonaws.com/admin/collections/Athena-New虽然正确的 aws 存储桶 url 是https://s3.us-east-2.amazonaws.com/testbucket/admin/collections/Athena-New为什么它将存储桶名称附加到 url 中的 s3 之前?简单来说,我想复制的内容https://s3.us-east-2.amazonaws.com/testbucket/admin/collections/Athena至https://s3.us-east-2.amazonaws.com/testbucket/admin/collections/Athena-New
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

无法在 Amazon S3 中“复制文件夹”,因为文件夹实际上并不存在。

相反,对象的完整路径存储在对象的Key(文件名)中。

因此,一个对象可能被称为:

admin/collections/Athena/foo.txt

如果您希望将所有对象从一个“文件夹”复制到另一个“文件夹”,那么您需要:

  • 获取给定存储桶的列表Prefix(实际上是文件夹的完整路径)

  • 循环遍历返回的每个对象,并将对象一次一个复制到新名称(有效地将其放入新文件夹中)

所以,它会复制admin/collections/Athena/foo.txtadmin/collections/Athena-New/foo.txt


查看完整回答
反对 回复 2021-07-02
  • 1 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信