我试图将一个对象从s3存储桶中复制到我的s3存储桶中,但是却给了这样一个文件的http网址;
如果我抛出的是浏览器,我会得到一个csv,一点也不担心(注意:我遮盖了真实网址的某些部分,因此对您不起作用)。
我在具有以下参数的节点中使用copyObject API:
var params = { 值区:“ me-buket”, CopySource:“ 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:不支持的复制源参数。”
我在做什么错??
答案 0 :(得分:1)
S3不支持将预签名URL(或任何其他URL)用作CopySource
。您想要的值为/${bucket}/${key}
,在这种情况下为/not-my-bucket/1234567381...acZMLZ.csv.gz
(前导https://
替换为前导斜杠,删除了.s3.amazonaws.com
,而?
和删除之后的所有内容)。
但是...这仍然不太可能,除非调用copyObject()
的用户有权直接读取源对象,这不太可能...否则第三方将不会给您预先签名的URL。
如上所述“修复”您的请求可能会将错误更改为AccessDenied
。
未经许可直接读取对象,不能使用copyObject()
。您需要下载文件,然后分两步将其上传到存储桶中。
答案 1 :(得分:0)
上述错误表明您提供的CopySource参数不正确。给出CopySource参数的正确方法如下:
var params = { Bucket: "your_bucket", CopySource: "/source_bucketname_url/sourceobjectkey"};
注意:源存储桶的名称和源对象的键名称必须用斜杠(/)分隔。