【问题标题】:Skipper in SailsJS (beta) image resize before uploadSailsJS(beta)图像中的船长在上传前调整大小
【发布时间】:2014-07-26 23:29:03
【问题描述】:

我正在使用 SailsJS(测试版)。我正在尝试找到一种方法来使用 graphicsmagick 在调用 Skipper 函数req.file('inputName').upload() 之前使用 SailsJS-beta 中的 Skipper 解析的流来调整图像大小。

我的目标是在上传之前拍摄我的大型原始图片并调整其大小。 Sails beta 引入了文档不足的 Skipper-file-parser(至少我不明白)。请帮助我了解如何在上传前调整图像大小。

这有效(我的控制器操作中的代码):

req.file('fileName').upload('storedImage.png', function(err, files){
  // File is now uploaded to storedImage.png
});

我想要的是这样的:

// Read the file stream into a file upload
var stream = req.file('fileName');

gm(stream).resize(200, 200).write('storedImage.png', function(err){
  // File is now resized to 200x200 px and uploaded to storedImage.png
});

我的问题是:如何正确地从 req.file('fileName') 获取流以将其发送给 gm?

【问题讨论】:

    标签: image sails.js graphicsmagick skipper


    【解决方案1】:

    这应该适合你:

    var Writable = require('stream').Writable;
    var resize = require('image-resize-stream')(100); // Or any other resizer
    
    // The output stream to pipe to
    var output = require('fs').createWriteStream('storedImage.png');
    
    // Let's create a custom receiver
    var receiver = new Writable({objectMode: true});
    receiver._write = function(file, enc, cb) {
      file.pipe(resize).pipe(output);
    
      cb();
    };
    

    现在您只需使用接收器即可:

    req.file('fileName').upload(receiver, function(err, files){
      // File is now resized to 100px width and uploaded to ./storedImage.png
    });
    

    我有一种感觉,Skipper 的 API 将会发生很大的变化,但现在可以正常工作(使用 v0.1.x)。

    更新

    具体来说,如果使用gm 调整大小,会是这样的:

    var gm = require('gm');
    var Writable = require('stream').Writable;
    
    // The output stream to pipe to
    var output = require('fs').createWriteStream('storedImage.png');
    
    // Let's create a custom receiver
    var receiver = new Writable({objectMode: true});
    receiver._write = function(file, enc, cb) {
      gm(file).resize('200', '200').stream().pipe(output);
    
      cb();
    };
    

    【讨论】:

    • 我如何使用船长 s3 将该文件上传到 s3。我正在尝试将 skipper-s3 参数返回到 .upload
    【解决方案2】:

    我在使用@bredikhin 解决方案时遇到了问题,所以我深入研究了这个问题,发现这个帖子很有帮助:Uploading files using Skipper with Sails.js v0.10 - how to retrieve new file name

    我只是改了他的Uploader一行:

    [...]    
    
    file.pipe(outputs);
    
    [...]
    

    进入:

    gm(file).resize(200, 200).stream().pipe(outputs);
    

    这就是诀窍。

    我写这个答案是因为它可能对某人有帮助。

    【讨论】:

    • 这不正是@bredikhin 在他更新的帖子中所说的吗?
    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2015-06-19
    • 2015-08-06
    • 2020-09-04
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多