Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js aws sdk s3.getObject带重定向_Node.js_Amazon Web Services_Express_Amazon S3_Aws Lambda - Fatal编程技术网

Node.js aws sdk s3.getObject带重定向

Node.js aws sdk s3.getObject带重定向,node.js,amazon-web-services,express,amazon-s3,aws-lambda,Node.js,Amazon Web Services,Express,Amazon S3,Aws Lambda,简而言之,我正试图通过重定向、aws lambda和aws sdk来调整图像的大小 在使用AWS动态调整图像大小的教程之后,我已经设法根据演练使一切正常,但是我的问题与调用bucket有关 目前我唯一能让它工作的方法就是打电话, http://MY_BUCKET_WEBSITE_HOSTNAME/25×25/blue_marble.jpg 如果映像不可用,则会重定向请求,调整映像大小,然后将其放回存储桶中 我想做的是通过s3.getObject()调用访问aws sdk中的bucket,而不是直

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

在使用AWS动态调整图像大小的教程之后,我已经设法根据演练使一切正常,但是我的问题与调用bucket有关

目前我唯一能让它工作的方法就是打电话,
http://MY_BUCKET_WEBSITE_HOSTNAME/25×25/blue_marble.jpg

如果映像不可用,则会重定向请求,调整映像大小,然后将其放回存储桶中

我想做的是通过s3.getObject()调用访问aws sdk中的bucket,而不是直接访问该链接

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

我的想法是请求没有被发送到正确的端点,根据我在网上找到的信息,我将sdk的创建方式改为-

s3=新的aws.s3({
accessKeyId:“myAccessKeyId”,
secretAccessKey:“我的secretAccessKey”,
地区:“美国西部2号”,
端点:'.s3-website-us-west-2.amazonaws.com',
s3BucketEndpoint:对,
sslEnabled:错误,
签名版本:“v4”
})
参数={
水桶:“我的水桶”,
键:“85x85/blue_marble.jpg”
};
s3.getObject(参数,(错误,数据)=>data)

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

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

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

XMLParserError:第一个标记前的非空白


不确定是否可以使用s3.getObject(),似乎可以,但我似乎无法确定。使用headObject检查对象是否存在。如果没有,你可以调用你的API来调整大小&然后在调整大小后重试get

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重定向并将文件作为数组缓冲区发送给我。这甚至可能是不可能的。你知道这样行不行吗?否则,您的解决方案确实让我达到了需要的位置。据我所知,这是不可能的。正如您所发现的,SDK的端点可以更改,但它不是为与网站端点一起工作而设计的,因此出现了XML错误。网站端点也不支持基于凭据的访问——它们仅用于公共内容。为什么您要尝试使用SDK而不仅仅是一个普通的HTTP请求?我一直在尝试熟悉SDK的使用。看起来它可以工作,但事实并非如此,我想知道原因。从来没有发现过明确说明SDK不是设计用于这样的网站端点的东西。这就是为什么我希望在继续前进之前先问一个有更多知识的人。谢谢另见。