【问题标题】:Upload a file to s3 given a https s3 url给定 https s3 url 将文件上传到 s3
【发布时间】:2019-08-17 14:34:08
【问题描述】:

我正在尝试将一个对象从一个 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,完全不用担心(注意:我已经隐藏了真实 url 的一部分,所以它对你不起作用)。

我在节点中使用 copyObject API,参数如下:

变量参数 = { 桶:“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” , 键:“数据” };

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

我做错了什么??

【问题讨论】:

    标签: node.js amazon-s3 aws-sdk


    【解决方案1】:

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

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

    如上所述“修复”您的请求可能会将错误更改为AccessDenied

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

    【讨论】:

    • 是的,这解决了它,我将不得不采取其他方式
    【解决方案2】:

    上述错误表明您提供的 CopySource 参数不正确。给出 CopySource 参数的正确方法如下:

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

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

    【讨论】:

    • 谢谢你,但身份验证仍然会导致问题
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 2022-08-20
    • 2018-02-07
    • 2015-04-12
    • 2020-10-23
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多