【问题标题】:Sails.js File upload with Skipper to AWS S3使用 Skipper 将 Sails.js 文件上传到 AWS S3
【发布时间】:2020-05-12 08:18:36
【问题描述】:

我有一个表单,您可以在其中上传文件。我直接用skipper上传文件,效果很好。

req.file('file').upload({
    adapter: require('skipper-s3'),
    key: 'key',
    secret: 'secret',
    bucket: 'bucketname'
}, function (err, uploadedFiles) {
    if (err){
        // ko
    }
    else{
        // ok
    }
});

但我想先调整大小再上传文件,所以:

sharp(original).resize(800).quality(90).toBuffer(function(err, outputBuffer) {
    if (err) {
        // ko
    }
    // ok
    outputBuffer;
 });

所以,我的问题是:如何上传 outputBuffer 而不是 req.file('file')

【问题讨论】:

  • 你有解决这个问题的办法吗?

标签: sails.js skipper


【解决方案1】:

您可以使用aws-sdk 模块,而不是使用skipper-s3。将图片上传到磁盘(原件),处理,上传,删除原件。

var AWS = require('aws-sdk'),
    fs = require('fs');

sharp(original).resize(800).quality(90).toBuffer(function(err, outputBuffer) {
    if (err) {
       ...
    } else {
        new AWS.S3({
            accessKeyId: 'your access key', 
            secretAccessKey: 'your secret',
            params : { 
                Bucket : 'your bucket',
                Key: 'desired filename'
            }
        });

        s3client.upload({ACL:'public-read', Body: outputBuffer}, function(err, result) {
            if(err) {
                //handle error
            } else {
               // continue, handle returned data
               fs.unlinkSync(original); // delete original
            }
        });
     }
 });

另外,一些库(如gm)可以采用远程 URL。您可以使用 skipper-s3 进行上传,然后执行上面的过程(其中原始是 s3 URL),它也可以工作,但实际上不是性能。

【讨论】:

    【解决方案2】:

    使用 Skipper-s3 和sails version_1 和sails-hook-uploads

    npm isails-hook-uploads

    fn: async function (inputs) {
        var coverImage = await sails
          .uploadOne(inputs.coverImage, {
            // maxBytes: 3000000
            adapter: require('skipper-s3'),
            key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
            secret: 'xxxxxxxxxxxxxxxxxxxx',
            bucket: 'xxxxxxx',
            saveAs:'your custom file name ?',
            dirname: '/cover_images ?',
          })
          // Note: E_EXCEEDS_UPLOAD_LIMIT is the error code for exceeding
          // `maxBytes` for both skipper-disk and skipper-s3.
          .intercept('E_EXCEEDS_UPLOAD_LIMIT', 'tooBig')
          .intercept(
            (err) =>
              new Error('The coverImage upload failed: ' + util.inspect(err)),
          )
    
        if (!coverImage) {
          throw 'noFileAttached'
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      相关资源
      最近更新 更多