amazon-web-services - 如何使用 php aws sdk 复制整个 s3 文件夹?

标签 amazon-web-services api amazon-s3 copy aws-php-sdk

我想在 aws s3 存储桶中复制一个文件夹。我能够复制文件,但要求我应该能够使用其他名称复制整个 s3 文件夹。
例如:如果文件夹名称是 project1我需要将其复制为 project1-copy在名为 my_bucket 的存储桶中.我试过下面的代码。

$s3->copyObject([
    'Bucket'     => my_bucket,
    'Key'        => "project-copy",
    'CopySource' => "my_bucket/project1",
]);

并且也反转为
$s3->copyObject([
    'Bucket'     => my_bucket,
    'Key'        => "project1",
    'CopySource' => "my_bucket/project-copy",
]);

在这两种情况下,我都收到错误消息

Error executing "CopyObject" on "https://s3.us-east-1.amazonaws.com/my_bucket/project1/"; AWS HTTP error: Client error: PUT https://s3.us-east-1.amazonaws.com/my_bucket/project1/ resulted in a 404 Not Found response: NoSuchKeyThe specified key does not exist.34/F992013F6C3125 (truncated...) NoSuchKey (client): The specified key does not exist. - NoSuchKeyThe specified key does not exist.34/F992013F6C312535YLrCcHhYJzimIKoR2knMvD3smhUbH75piDYTIx5SpKCPNkeWIifaYhKgezxnhpZzOHflzQngTnE=There was an error uploading



而且我确信我使用了正确的区域和文件夹名称以及存储桶名称。
仍然收到上述错误。我该如何解决这个问题。?

最佳答案

Amazon S3 中不存在文件夹。

相反,对象的 key (文件名)包括完整路径,例如:

s3merahkee/project1/foo.txt

如果您希望复制整个“文件夹”,则需要复制该路径内的所有文件对象。

另外,请注意您不需要预先创建文件夹来存储文件。你可以运行这样的命令:
aws s3 cp foo.txt s3://my-bucket/s3merahkee/project1/foo.txt

此命令将“创建”s3merahkeeproject1文件夹。好吧,实际上它根本不创建它们,因为它们不存在,而是 Amazon S3 管理控制台甚至 aws s3 ls命令将使它“出现”,就好像这些文件夹存在一样。如果您要删除该文件,这些文件夹将立即消失(因为它们实际上并不存在)。

复制整个文件夹的最简单方法是使用 AWS Command-Line Interface (CLI) , 像这样:
aws s3 cp --recursive s3://my-bucket/folder1 s3://my-bucket/folder2

关于amazon-web-services - 如何使用 php aws sdk 复制整个 s3 文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51709543/

相关文章:

amazon-web-services - 如何使用同一 API 网关将 lambda 授权方添加到 AWS SAM 应用程序

amazon-web-services - 如何使用缓存的 boto3 客户端和 Lambda 预置并发刷新凭证?

python - Django Rest Framework 用户名/密码无效

python - eOS 上的简单万神殿面板小程序?

python - Django 迁移不会更改 AWS Elastic Beanstalk 中的数据库

amazon-web-services - 根据参数在云信息模板中命名?

scala - 从本地 Spark 中的 S3 读取文件时清洁线程出现异常

browser - 缓存对 CORS : No 'Access-Control-Allow-Origin' header is present on the requested resource 的影响

android - React-native - Axios GET 请求在 Android 模拟器中引发网络错误

amazon-web-services - 通过 AWS 上的 API 在胶水表上添加分区?