给定 https s3 url 将文件上传到 s3

Upload a file to s3 given a https s3 url

我正在尝试将一个对象从一个 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

如果我抛出 this is the browser 我得到一个 csv 根本不用担心(注意:我已经遮盖了真实 url 的部分所以它不适合你)。

我在具有以下参数的节点中使用 copyObject API:

var 参数 = { 桶:"me-buket", 复制来源:“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” , 关键: "data" };

我一直收到错误消息: "InvalidArgument: Unsupported copy source parameter."

我做错了什么??

以上错误表明您提供的 CopySource 参数不正确。 CopySource 参数的正确赋值方式如下:

var params = { Bucket: "your_bucket", CopySource: "/source_bucketname_url/sourceobjectkey"};

注意:源存储桶的名称和源对象的键名称必须用斜杠 (/) 分隔。

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

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

"Fixing" 您的上述请求可能会将错误更改为 AccessDenied

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