我正在使用SailsJS(测试版)。我正在尝试找到一种方法,在调用Skipper函数req.file('inputName').upload()
之前,使用graphicsmagick来获取Skipper在SailsJS-beta中解析的流以调整图像大小。
我的目标是拍摄较大的原始图像,并在上载之前调整其大小。 Sails beta引入了Skipper-file-parser,该文件记录不充分(至少我不理解)。请帮助我了解上传前如何调整图像大小。
这有效(我的 Controller 操作中的代码):
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?
最佳答案
这应该为您工作:
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();
};
关于image - 上载之前,SailsJS(beta)图像中的船长会调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24069203/