当前位置: 首页 > 面试题库 >

流式传输通过gm用Express.js上传的文件,以消除重复写入

张俊茂
2023-03-14
问题内容

我正在使用,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中间件完成),也不确定如何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


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



 类似资料:
  • 我也有这里提到的同样的问题。 然后我想把它作为一个上传体流到另一个服务endpoint。 该解决方案的生成方式如下:bodytype=org.springframework.web.reactive.function.bodyinserters不支持

  • 我目前通过AJAX发布我的表单,代码如下: 现在,我想添加以相同形式上传图片的功能,并在这个JQUERY和相同的服务器端脚本中实现它。我唯一的问题是,我不知道怎么做…我测试了上面的代码,发现它没有将$_files-变量传递给服务器端脚本。 谁能带领我在任何方向,我需要做的,以增加与此脚本图像上传的可能性?

  • 最近,在一次采访中,我被问到一个关于Kafka流的问题,更具体地说,面试官想知道为什么/什么时候您会使用Kafka流DSL而不是普通的Kafka消费者API来读取和处理消息流?我不能给出一个令人信服的答案,我想知道使用这两种流处理风格的其他人是否可以分享他们的想法/意见。多谢了。

  • 问题内容: 我想使用Ajax通过模式上传文件。我怎样才能做到这一点? 我的模态: 这是我的JavaScript文件: 这是我的控制器: 但它返回错误500。我认为Ajax不接受使用Bootstrap模式的文件上传。 问题答案: 您可以像这样通过ajax使用引导程序模式上载文件。 在表单标签中,使用属性enctype和html如下所示: js代码: 在您的控制器端,您可以执行以下功能来上传图像。

  • 我试图移动一些文件从存储目录到远程服务器"BOB"使用jcifs SMB.我需要使用jcifs,因为移动通过和Android应用程序,即。我正在将照片从应用程序移动到远程服务器。为了验证为用户,我的公司使用Active Directory。有一段时间,Active Directory和照片所在的服务器是同一个服务器,一切都很好。不幸的是,他们不得不将存储Active Directory的服务器更改

  • 问题内容: 选择图像,doc或pdf后,我想将它们通过okhttp3。如何进行此操作? 并在okhttp 3中 显示的错误是 谢谢。 问题答案: 所以我自己回答这个问题。 因此,我首先将输出流打开到一个临时文件。 扩展名取决于mime类型。您可以通过以下方式找到mime类型 现在从文件读取并将其内容写入临时文件 现在写入文件 最后 成功之后的最后