Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 显示来自AmazonS3的带有nodejs、expressjs和knox的图像_Node.js_Amazon S3_Knox Amazon S3 Client - Fatal编程技术网

Node.js 显示来自AmazonS3的带有nodejs、expressjs和knox的图像

Node.js 显示来自AmazonS3的带有nodejs、expressjs和knox的图像,node.js,amazon-s3,knox-amazon-s3-client,Node.js,Amazon S3,Knox Amazon S3 Client,我认为这应该是一件直截了当的事情,但我找不到解决办法:s 我正试图找出在网站上显示存储在AmazonS3上的图像的最佳方式 目前我正在尝试让它工作(不成功) //app.js app.get('/test',函数(req,res){ var file=fs.createWriteStream('slash-s3.jpg'); client.getFile('guitarists/cAtiPkr.jpg',函数(err,res){ res.on('data',function(data){file

我认为这应该是一件直截了当的事情,但我找不到解决办法:s

我正试图找出在网站上显示存储在AmazonS3上的图像的最佳方式

目前我正在尝试让它工作(不成功)

//app.js
app.get('/test',函数(req,res){
var file=fs.createWriteStream('slash-s3.jpg');
client.getFile('guitarists/cAtiPkr.jpg',函数(err,res){
res.on('data',function(data){file.write(data);});
res.on('end',函数(chunk){file.end();});
});
});
//index.html
难道不可能直接从amazon上显示图像吗?
我的意思是,减轻服务器负载的解决方案是最好的。

这是一个典型的应用案例。您要做的是:从AmazonS3请求一个文件,并将该请求的答案(即图像)直接重定向到客户端,而不存储临时文件。这可以通过使用流的函数来实现

我假设您用来查询Amazon S3的库返回一个流,正如您已经使用了
.on('data')
.on('end')
,这是流对象的标准事件

以下是您如何做到这一点:

app.get('/test', function (req, res) {
    client.getFile('guitarists/cAtiPkr.jpg', function(err, imageStream) {
        imageStream.pipe(res);
    });
});
通过使用管道,我们将请求到S3的输出直接重定向到客户端。当对S3的请求关闭时,这将自动结束express的
res

有关流的更多信息,请参阅substack的“优秀”


注意,在您的代码片段中有两个名为
res
的变量:内部变量将掩盖外部变量,这可能导致难以发现的错误。

如果您正确设置访问控制(基于每个键,而不是整个存储桶),那么您可以使用
(如果您使用的不是us-east-1,则为另一个适当的域)如果您希望在html中显示图像,请记住,如果您希望浏览器显示图像,而不是在有人打开图像时将其作为附件下载,请设置MIME类型



您的服务器发出实际请求,但它不会将结果存储到文件中,而是直接将输出写入客户端的套接字。这非常有效,并允许进行整洁的优化。有关核心流机制的概述,请参阅流手册。在流式处理多个图像时如何应用此方法?有关详细信息,请参阅站姿,将许多图像流式传输到用户的新feed上,如Facebook。
app.get('/test', function (req, res) {
    client.getFile('guitarists/cAtiPkr.jpg', function(err, imageStream) {
        imageStream.pipe(res);
    });
});
var AWS = require('aws-sdk');
AWS.config.update({
  accessKeyId: "something",
  secretAccessKey: "something else",
  region:'us-east-1',
  sslEnabled: true,
});
var fileStream = fs.createReadStream(filename);
s3.putObject({
  Bucket:'myBucket',
  Key: 'myKey/moreKey.jpg',
  Body: fileStream,
  ContentType:'image/jpeg',
  ACL: 'public-read',
}, function(err, data){
  if(err){ return callback(err) };
  console.log('Uploaded '+key);
  callback(null);
});