node.js - 给定 https s3 url 将文件上传到 s3

标签 node.js amazon-s3 aws-sdk

我正在尝试将一个对象从 s3 存储桶复制到我的 s3 存储桶,但我得到了一个像这样的文件的 http url;

https://not-my-bucket.s3.amazonaws.com/123456738160996-2019-03-23-eo_branch_cta_view-v2-cf5e81e668466de13406877ad681895f6fdd50f38ab7fdb48193d78210098b81-acZMLZ.csv.gz?Signature=12345678Hr3ght0cOPw7bLz%2FJWM%3D&AWSAccessKeyId=123456&Expires=1554017348

如果我抛出这个浏览器,我会得到一个 csv,完全不用担心(注意:我已经模糊了真实网址的部分内容,所以它对你不起作用)。

我在 Node 中使用 copyObject API 并使用以下参数:

var 参数 = { 桶:“我-桶”, 复制来源:“https://not-my-bucket.s3.amazonaws.com/123456738160996-2019-03-23-eo_branch_cta_view-v2-cf5e81e668466de13406877ad681895f6fdd50f38ab7fdb48193d78210098b81-acZMLZ.csv.gz?Signature=12345678Hr3ght0cOPw7bLz%2FJWM%3D&AWSAccessKeyId=123456&Expires=1554017348” ,键:“数据” };

我不断收到错误: “InvalidArgument:不支持的复制源参数。”

我做错了什么?

最佳答案

S3 不支持使用预签名 URL(或任何其他 URL)作为 CopySource。您想要的值为 /${bucket}/${key},在本例中为 /not-my-bucket/1234567381...acZMLZ.csv.gz(前导 https:// 替换为前导斜杠,.s3.amazonaws.com 已删除,? 及其后面的所有内容均已删除)。

但是...这仍然不太可能起作用,除非调用 copyObject() 的用户有权直接读取源对象,而这不太可能...否则第三方不会向您提供预签名 URL。

按照上述方式“修复”您的请求可能会将错误更改为 AccessDenied

如果没有直接读取对象的权限,则无法使用copyObject()。您需要下载该文件,然后分两步将其上传到您的存储桶。

关于node.js - 给定 https s3 url 将文件上传到 s3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55370204/

相关文章:

hadoop - 您可以使用 Spark SQL/Hive/Presto 直接从 Parquet/S3 复制到 Redshift 吗?

amazon-web-services - 使用 amazon sagemaker python SDK 与 AWS SDK for python (Boto3) 有什么区别

amazon-web-services - 获取 s3 存储桶上的资源 URI

javascript - 你能安全地将 JavaScript 类实例存储在 Redis 中吗?

javascript - 如何在express.js中打开多个url?

node.js - 错误: Invalid protocol

javascript - 使用nodejs将 'Ł'和 'ł'字符保存为ascii/ansi文件

amazon-web-services - 使用 Athena Terraform 脚本

ruby-on-rails - 如何在本地定义环境变量而不更改它们的定义/将它们推送到 heroku?

node.js - 如何使用nodejs将图像上传到s3存储桶?