AWS S3 - 如何通过强制下载而不是显示来停止图像。

时间:2016-06-19 01:05:12

标签: amazon-web-services amazon-s3

我目前正在尝试将图片从我的网站加载到AWS S3。我有功能工作,它将图像上传到服务器,但当我尝试查看他们下载的图像而不是显示。我读到有一种设置文件类型的方法,所以这不会发生。我不知道该怎么做。任何帮助都会很棒。

                router.post('/heroes/createNewHeroes', function(req,res) {
                    var formidable = require('formidable'),
                    http = require('http'),
                    util = require('util');

                    var form = new formidable.IncomingForm();

                    form.parse(req, function(err, fields, files) {
                        console.log(fields);
                        console.log(files);

                        // Load the AWS SDK for Node.js
                        var AWS = require('aws-sdk');
                        var shortid = require('shortid');
                        var fs = require('fs');
                        var fileStream = fs.createReadStream(files.asset.path);
                        var newFilename = shortid.generate()+"_"+files.asset.name;

                        // Set your region for future requests.
                        AWS.config.region = 'us-west-2';
                        AWS.config.accessKeyId = 'access Key';
                        AWS.config.secretAccessKey = 'secret Key';

                        console.log(newFilename);

                        fileStream.on('error', function (err) {
                          if (err) { throw err; }
                        });

                        fileStream.on('open', function () {
                            var s3bucket = new AWS.S3({params: {Bucket: ' '}});
                            s3bucket.createBucket(function() {
                              var params = {Key: newFilename, Body: fileStream};
                              s3bucket.upload(params, function(err, data) {
                                if (err) {
                                    console.log("Error uploading data: ", err);
                                } else {
                                    console.log("Successfully uploaded data");

                                    projectX.createHeroes(['plantTypes', 'asset', 'cost', 'energy', 'isSunProducer', 'isShooter', 'isExploding', 'sunFrequency', 'shootingFrequency', 'damage'], [fields.plantTypes, newFilename, fields.cost, fields.energy, fields.isSunProducer, fields.isShooter, fields.isExploding, fields.sunFrequency, fields.shootingFrequency, fields.damage], function(data){
                                        res.redirect('/heroes')
                                    });
                                }
                              });
                            });

                        });

                    });
                });

3 个答案:

答案 0 :(得分:3)

var params = {Key: newFilename, ContentType: 'image/png', Body: fileStream};

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property

答案 1 :(得分:1)

只需输入" contentType:multerS3.AUTO_CONTENT_TYPE" 。它会起作用。

例如:

var upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'some-bucket',
    contentType: multerS3.AUTO_CONTENT_TYPE,
    key: function (req, file, cb) {
      cb(null, Date.now().toString())
    }
  })
})

访问此链接了解更多详情https://github.com/badunk/multer-s3

答案 2 :(得分:1)

这对我有帮助

storage: multerS3({
s3: s3,
bucket: "bucketname",
acl: "public-read",
contentType: multerS3.AUTO_CONTENT_TYPE,
key: function(req, file, cb) {
  console.log("req.file", file);
  cb(null, `${Date.now()}-${file.originalname}`);
}
})