Skipper in SailsJS (beta) image resize before upload

拈花ヽ惹草 提交于 2019-11-28 12:09:28

This should work for you:

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();
};

Now in your action you just have to use your receiver:

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

I have a feeling that Skipper's API is going to change, a lot, but this will work for now (with v0.1.x).

UPDATE

Specifically, if using gm for resizing, it'll be something like this:

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();
};
mkatanski

I had problems with @bredikhin solution so I dig deeper into this and found this thread very helpful: Uploading files using Skipper with Sails.js v0.10 - how to retrieve new file name

I just changed one line of his Uploader:

[...]    

file.pipe(outputs);

[...]

into:

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

and this does the trick.

I wrote this answer because it may be helpful for someone.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!