node.js - 如何调整图像大小并使用 nodejs 中的 multer 上传到 s3 并使用 easy-image npm 模块?

标签 node.js amazon-s3 multer multer-s3

我已经使用下面的代码在 nodejs 中使用 easy image npm 模块调整了图像的大小。

var easyimg = require('easyimage');

easyimg.rescrop({
     src:'1.jpg', dst:'/var/www/html/bangalore.jpg',
     width:100, height:100

  }),function(image,err){
     // console.log('Resized and cropped: ' + image.width + ' x ' + image.height);
     if(image){
     console.log(image);   
     }
     else{
     console.log(err);    
     }

  }

我得到了成功的输出。 然后我使用下面的代码和 multer 将我的图像上传到 s3。

var storage = multerS3({
              s3: s3,
              bucket: 'my_bucket_name',
              key: function (req, file, cb) {
                  console.log(file);
                  file_name = file.originalname;
                  var newFileName = Date.now() + "-" + file.originalname;
                  cb(null, newFileName);
              }
           });
              var upload = multer({storage: storage}).single('profileImage');
             upload(req, resq, function (err,res,response) {
              console.log(response);
             });

现在我的问题是如何在上传到 s3 之前调整图像大小,然后将调整后的图像上传到 s3?

我也尝试过使用 multer-imager 模块。

var transfer = imager({

              secretAccessKey: 'secretAccessKey',
              accessKeyId: 'myaccesskey',
              dirname:'avatar',
              bucket: 'my_bucket',

              region:'myregion',

              key: function (req, file, cb) {
                  console.log(file);
                  file_name = file.originalname;
                  var newFileName = Date.now() + "-" + file.originalname;

                cb(null, newFileName);
                console.log(newFileName);

              },                                    //
    gm: {                                 // [Optional]: define graphicsmagick options
      width: 200,                         // doc: http://aheckmann.github.io/gm/docs.html#resize
      height: 200,
      options: '!',
      format: 'png'                       // Default: jpg
    }
           });
              var upload = multer({storage: transfer}).single('myimage');
             upload(req, resq, function (err,res,response) {
              console.log(req.file); //i am getting this as undefined
             })

但它不起作用。 在“req.file”中,我变得不确定。?

最佳答案

为什么不使用 multer-s3-transofrm内置 transforms结合 multer s3 模块?

var upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'some-bucket',
    shouldTransform: function (req, file, cb) {
      cb(null, /^image/i.test(file.mimetype))
    },
    transforms: [{
      id: 'original',
      key: function (req, file, cb) {
        cb(null, 'image-original.jpg')
      },
      transform: function (req, file, cb) {
        //Perform desired transformations
        cb(null, sharp().resize(600, 600).max())
      }
    }]
  })
})

来自文档:

可选的 shouldTransform 选项告诉 multer 是否应该在上传文件之前转换文件。默认情况下,它设置为 false。如果设置为 true,则必须添加 transforms 选项,它告诉如何转换文件。

transforms 选项应该是一个数组,包含可以具有属性 id、key 和 transform 的对象。

此示例使用 sharp用于转换(众所周知的 Node.js 图像处理模块)。

关于node.js - 如何调整图像大小并使用 nodejs 中的 multer 上传到 s3 并使用 easy-image npm 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45281726/

相关文章:

javascript - 使用请求在 Node.js 中获取二进制内容

amazon-web-services - 使用云结构在 S3 中保留最多 20 个项目

node.js - 如何使用 Multer 在新选项卡中查看图像而不是在 NodeJS 中下载

javascript - 当与 multer 一起用于多部分数据时,hasOwnproperty 变得未定义

apache-spark - AWS Glue 可以抓取 Delta Lake 表数据吗?

react-native - 如何将 react-native 图像从 expo-image-picker 上传到使用 multer 的 Express.js 后端

node.js - 一对多 Mongoose 关系 - 在哪里存储引用

node.js - 使用 websocket 从数据库到客户端的实时数据更新/更改

javascript - Node.js 库如何在特定 URL 路径上注册 HTTP 请求?

amazon-web-services - 如何使用 AWS Lambda 捕获无服务器网站屏幕截图?