我正在尝试将一个对象从 s3 存储桶复制到我的 s3 存储桶,但我得到了一个像这样的文件的 http url;
如果我抛出这个浏览器,我会得到一个 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/