javascript - 从 S3 getObject() 中检索图像不起作用
问题描述
我正在尝试从 S3 获取图像,即使我认为我提供了正确的信息,我似乎也无法取回图像。
目前它在几秒钟后返回一个空值,它使页面看起来像是坏了/服务器在 5 秒内没有响应。
路线
// GET TEST
app.get('/test',
isAuthenticated,
(req, res) => {
var image;
var params = {
Bucket: "<bucket name>",
Key: "<tried both the Etag and the file name both failed>"
};
s3.getObject(params, (err, data) => {
image = data;
console.log('Data: ',data);
res.render('test/test', {header: 'TEST', image: image});
});
console.log('Image: ', image);
});
我从阅读文档中getObject()
知道这似乎是我需要的,但实际上让它发挥作用已被证明是困难的。
AWS 配置
var aws = require("aws-sdk"),
s3 = new aws.S3();
var config = require('../config/config');
aws.config.update({
secretAccessKey: config.aws_s3.secretAccessKey,
accessKeyId: config.aws_s3.accessKeyId,
region: config.aws_s3.region
});
这取自我的代码库的一个已知工作部分。
我错过了什么文件没有下载?如果文件直接发送到客户端而不是发送到我的服务器然后是客户端,我也会喜欢它。
编辑
我已经得到它来给我一些数据,但仍然不会显示图像
数据
Data: { AcceptRanges: 'bytes',
LastModified: 2018-09-22T01:53:39.000Z,
ContentLength: 2117,
ETag: '"<Etag>"',
ContentType: 'application/octet-stream',
ServerSideEncryption: 'AES256',
Metadata: {},
Body: <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 30 00 00 00 30 08 06 00 00 00 57 02 f9 87 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00 00 04 ... > }
解决方案
我终于解决了这个问题,与我一直在尝试的方法和链接的方法相比,它采用了一种完全不同的方法。比链接方法简单得多。
有效的方法是使用我之前尝试getSignedUrl
使用的功能。getOjbect
我的路线
// GET TEST
app.get('/test',
isAuthenticated,
(req, res) => {
var urlParams = {Bucket: config.aws_s3.logoBucket, Key: <key>'};
logoBucket.getSignedUrl('getObject', urlParams, function(err, url){
res.render('test/test', {header: 'TEST', url: url});
});
});
配置
var aws = require("aws-sdk");
var config = require('../config/config');
aws.config.update({
secretAccessKey: config.aws_s3.secretAccessKey,
accessKeyId: config.aws_s3.accessKeyId,
region: config.aws_s3.region,
sslEnabled: true
});
var s3 = new aws.S3();
var logoBucket = new aws.S3( { params: {Bucket: config.aws_s3.logoBucket} } )
推荐阅读
- java - 如果未检测到“@”符号,则将错误消息打印到屏幕
- javascript - 验证对象的值
- sql - Redshift Left Join with filter drop 不匹配的记录
- typescript - 如何从 ApplicationContext 获取实体的存储库
- python - 定义具有平台变体的函数的最正确方法
- php - 神秘缓存的 Content-Security-Policy 幽灵在缺席时拒绝内容
- php - 读取存储在媒体文件夹中的 excel 文件
- python - Python 嵌套单行
- javascript - 如何在项目之间显示带有空格的数组firestore
- javascript - 如何在时间延迟上准确地设置状态?