我正在使用,Express.js并且有一条路线可以上传需要调整大小的图像。目前,我只是Express将文件写入磁盘(我认为是node- formidable在幕后使用),然后使用gm(http://aheckmann.github.com/gm/)调整大小,这会将第二个版本写入磁盘。
Express.js
Express
node- formidable
gm
gm(path) .resize(540,404) .write(dest, function (err) { ... });
我读过您可以在node- formidable文件流写入磁盘之前获得文件流的所有权,并且由于gm可以接受流而不是路径,因此我应该能够通过消除对磁盘的双重写入来传递此权限。
我认为我需要重写,form.onPart但是我不确定在哪里(应该作为Express中间件完成),也不确定如何form使用part。这是我在几个地方看到的代码框架:
form.onPart
form
part
form.onPart = function(part) { if (!part.filename) { form.handlePart(part); return; } part.on('data', function(buffer) { }); part.on('end', function() { } }
有人可以帮我把这两部分放在一起吗?谢谢!
通过重写,您将走上正确的道路form.onPart。默认情况下,强大的写入磁盘操作,因此您需要先执行操作。
零件本身就是流,因此您可以将它们通过管道传递到所需的任何位置,包括gm。我没有测试过,但这根据文档是有道理的:
var form = new formidable.IncomingForm; form.onPart = function (part) { if (!part.filename) return this.handlePart(part); gm(part).resize(200, 200).stream(function (err, stdout, stderr) { stdout.pipe(fs.createWriteStream('my/new/path/to/img.png')); }); };
至于中间件,我会multipart从Connect / Express 复制粘贴中间件并将onPart功能添加到中间件:http : //www.senchalabs.org/connect/multipart.html
multipart
onPart
如果formidable默认情况下不写入磁盘或带有标志,那会更好很多,不是吗?您可以向他们发送问题。
formidable