gpt4 book ai didi

javascript - 通过 gm 流式传输使用 Express.js 上传的文件以消除双写

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:41 24 4
gpt4 key购买 nike

我正在使用 Express.js 并有一个上传图像的路径,然后我需要调整这些图像的大小。目前我只是让 Express 将文件写入磁盘(我认为它在幕后使用 node-formidable)然后使用 gm 调整大小(http ://aheckmann.github.com/gm/) 将第二个版本写入磁盘。

gm(path)
.resize(540,404)
.write(dest, function (err) { ... });

我读到你可以在将 node-formidable 文件流写入磁盘之前获取它,并且由于 gm 可以接受流而不是只是一个路径,我应该能够通过消除对磁盘的双重写入来传递这个权利。

我想我需要覆盖 form.onPart 但我不确定在哪里(它应该作为 Express 中间件完成吗?)而且我不确定如何掌握 formpart 的确切用途。这是我在几个地方看到的代码框架:

form.onPart = function(part) {
if (!part.filename) { form.handlePart(part); return; }

part.on('data', function(buffer) {

});
part.on('end', function() {

}
}

谁能帮我把这两部分放在一起?谢谢!

最佳答案

通过重写 form.onPart,您走在了正确的轨道上。 Formidable 默认写入磁盘,因此您想抢在它之前采取行动。

部件本身是流,因此您可以将它们通过管道传输到您想要的任何位置,包括 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'));
});
};

至于中间件,我将从 Connect/Express 复制粘贴 multipart 中间件并向其添加 onPart 函数:http://www.senchalabs.org/connect/multipart.html

如果 formidable 默认情况下不写入磁盘或者它带有一个标志,那会好很多,不是吗?您可以向他们发送问题。

关于javascript - 通过 gm 流式传输使用 Express.js 上传的文件以消除双写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11764585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com