在SailsJS(beta版)中使用Skipper,在上传前对图像进行调整大小

9
我正在使用SailsJS(beta)开发。我想找到一种方法,在调用Skipper函数req.file('inputName').upload()之前,利用graphicsmagick来调整SailsJS-beta中Skipper解析的流(stream)以缩小图像。
我的目标是在上传之前将大型原始图像调整大小。Sails beta引入了Skipper文件解析器,但文档不够清晰(至少我不理解)。请帮我理解如何在上传之前调整图像大小。
下面这段代码在我的控制器操作中有效:
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?

2个回答

13
这应该适用于您:

这应该适用于您:

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

我该如何使用Skipper S3将文件上传到S3?我正在尝试将Skipper-S3参数返回给.upload。 - Daniel Payne

1
我遇到了@bredikhin的解决方案问题,因此我深入研究了这个问题,并发现这个线程非常有帮助:使用Skipper和Sails.js v0.10上传文件-如何检索新文件名 我只更改了他的一个Uploader行。
[...]    

file.pipe(outputs);

[...]

转换为:

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

这就是解决问题的方法。

我写下了这个答案,因为它可能对某些人有帮助。


1
这不就是@bredikhin在他的更新帖子中所说的吗? - hansmei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接