【问题标题】:aws-sdk s3.getObject with redirect带有重定向的 aws-sdk s3.getObject
【发布时间】:2018-04-19 10:35:28
【问题描述】:

简而言之,我正在尝试通过重定向、aws lambda 和 aws-sdk 来调整图像大小。

按照有关使用 AWS 即时调整图像大小的教程AWS - resize-images-on-the-fly,我已经设法按照演练使一切正常,但是我的问题与调用存储桶有关。

目前,我可以让它工作的唯一方法是调用, http://MY_BUCKET_WEBSITE_HOSTNAME/25×25/blue_marble.jpg.

如果图片不可用,则重定向请求,调整图片大小,然后放回存储桶中。

我想做的是通过 s3.getObject() 调用访问 aws-sdk 中的存储桶,而不是直接链接。

到目前为止,我只能访问当前存储桶中的图像,因此永远不会发生重定向。

我的想法是请求没有被发送到正确的端点,并且根据我在网上找到的内容,我将创建 sdk 的方式更改为这个 -

s3 = new aws.S3({ accessKeyId: "myAccessKeyId", secretAccessKey: "mySecretAccessKey", region: "us-west-2", endpoint: '<MYBUCKET>.s3-website-us-west-2.amazonaws.com', s3BucketEndpoint: true, sslEnabled: false, signatureVersion: 'v4' }) params = { Bucket: 'MY_BUCKET', Key: '85x85/blue_marble.jpg' }; s3.getObject(params, (error, data) => data);

据我所知,请求中的端点看起来是正确的。

当我直接在浏览器中访问端点时,一切正常。

但是当使用 sdk 时,只返回可用的图像。没有重定向,没有数据返回,我得到了错误。

XMLParserError:第一个标签之前的非空白。

不确定是否可以使用 s3.getObject(),似乎可以,但我似乎无法弄清楚。

【问题讨论】:

  • 可以更改带有 SDK 的端点,如您所见,但它并非旨在与网站端点一起使用,因此会出现 XML 错误。网站端点也不支持基于凭据的访问——它们仅用于公共内容。为什么要尝试使用 SDK 而不是普通的 HTTP 请求?
  • 大部分时间都在尝试熟悉如何使用 SDK。看起来它可以工作,但它不是并且想知道为什么。从来没有发现有什么特别说明 SDK 不是为与这样的网站端点一起工作而设计的。这就是为什么我希望在继续之前询问更多知识的人。谢谢!

标签: node.js amazon-web-services express amazon-s3 aws-lambda


【解决方案1】:

使用 headObject 检查对象是否存在。如果没有,您可以调用您的 API 进行调整大小,然后在调整大小后重试获取。

var params = {
    Bucket: config.get('s3bucket'),
    Key: path
};

s3.headObject(params, function (err, metadata) {  
  if (err && err.code === 'NotFound') {  
    // Call your resize API here. Once your resize API returns a success, you can get the object\URL.
  } else {  
    s3.getSignedUrl('getObject', params, callback); //Use this secure URL to access the object.
 }
});

【讨论】:

  • 希望有一种方法可以通过单个 s3.getSignedUrl 或 s3.getObject 调用来处理所有事情。并不是说这不起作用......只是寻找一种调用 getObject 的方法,它会命中 404 重定向并将文件作为数组缓冲区发回给我。这甚至可能是不可能的。知道这样的东西是否有效吗?否则,您的解决方案确实让我到达了我需要的地方。
  • 据我所知这是不可能的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 2017-04-25
  • 1970-01-01
  • 2018-07-25
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多