在node.js服务器上接受请求正文中的二进制文件

在node.js服务器上接受请求正文中的二进制文件,node.js,file-upload,busboy,Node.js,File Upload,Busboy,我想上传一个二进制文件在一篇文章的正文中 我不想使用多部分/表单数据 据我所知,多部分/表单数据对于web应用来说是一种易于使用的技术,但对于移动应用来说并不容易。我没有网络应用,我只是在构建移动应用 我尝试过使用busboy,但在非多部分/表单数据上传上找不到任何东西。express fileupload也使用了同样的方法。因此,如果我理解正确,您希望创建一个用于将文件上载到服务器的路由。一种方法是结合使用body parser express中间件和写入流: const bodyparser

我想上传一个二进制文件在一篇文章的正文中

我不想使用多部分/表单数据

据我所知,多部分/表单数据对于web应用来说是一种易于使用的技术,但对于移动应用来说并不容易。我没有网络应用,我只是在构建移动应用


我尝试过使用busboy,但在非多部分/表单数据上传上找不到任何东西。express fileupload也使用了同样的方法。

因此,如果我理解正确,您希望创建一个用于将文件上载到服务器的路由。一种方法是结合使用body parser express中间件和写入流:

const bodyparser = require('body-parser');
const express = require('express');
const fs = require('fs');
const app = express();

app.post('/upload/:image', bodyparser.raw({
    limit: '10mb', 
    type: 'image/*'
}), (req, res) => {
    const image = req.params.image;
    const fd = fs.createWriteStream(`[SERVER_UPLOAD_PATH]/${image}`, {
        flags: "w+",
        encoding: "binary"
    });
    fd.end(req.body);
    fd.on('close', () => res.send({status: 'OK'});
});
发送以下请求将文件上载到[服务器上传路径]:

curl -X POST -H 'Content-Type: image/png' --data-binary @[image-path]/image.png http://[server-url]/upload/image.png

上面的示例用于将图像上载到服务器,但您可以相应地对其进行修改。请注意,您需要检查文件类型,以确保用户只上载他们应该上载的文件类型

因此,如果我理解正确,您希望创建一个用于将文件上载到服务器的路由。一种方法是结合使用body parser express中间件和写入流:

const bodyparser = require('body-parser');
const express = require('express');
const fs = require('fs');
const app = express();

app.post('/upload/:image', bodyparser.raw({
    limit: '10mb', 
    type: 'image/*'
}), (req, res) => {
    const image = req.params.image;
    const fd = fs.createWriteStream(`[SERVER_UPLOAD_PATH]/${image}`, {
        flags: "w+",
        encoding: "binary"
    });
    fd.end(req.body);
    fd.on('close', () => res.send({status: 'OK'});
});
发送以下请求将文件上载到[服务器上传路径]:

curl -X POST -H 'Content-Type: image/png' --data-binary @[image-path]/image.png http://[server-url]/upload/image.png

上面的示例用于将图像上载到服务器,但您可以相应地对其进行修改。请注意,您需要检查文件类型,以确保用户只上载他们应该上载的文件类型

谢谢你的回答!从req.params.image获取映像时遇到问题。没有定义。我在用邮递员寄邮件。你能展示一下你是如何使用邮递员上传的吗?我正在将标题内容类型设置为image/png,将body设置为binary,并上载我自己的图像image.png。我的代码中有一个输入错误:在路由名称中,我使用了“…/:file”,但后来我编写了req.params.image而不是req.params.file-我已经编辑了答案,现在应该可以了。很好,我认为这会起作用。我找不到正确的写作路径。你能举个例子说明一下,只要让它工作起来,它会是什么样子吗?我不太清楚。我猜我可以在写流关闭后从req.body获取图像数据?res.send{status:'OK'}当前在哪里?只要不在'close'上对fd.on使用return,=>。。。您可以继续使用req.body中的图像数据。例如,这将打印图像的缓冲区:fd.on'close',=>res.send{status:'OK'};console.logreq.body;谢谢你的回答!从req.params.image获取映像时遇到问题。没有定义。我在用邮递员寄邮件。你能展示一下你是如何使用邮递员上传的吗?我正在将标题内容类型设置为image/png,将body设置为binary,并上载我自己的图像image.png。我的代码中有一个输入错误:在路由名称中,我使用了“…/:file”,但后来我编写了req.params.image而不是req.params.file-我已经编辑了答案,现在应该可以了。很好,我认为这会起作用。我找不到正确的写作路径。你能举个例子说明一下,只要让它工作起来,它会是什么样子吗?我不太清楚。我猜我可以在写流关闭后从req.body获取图像数据?res.send{status:'OK'}当前在哪里?只要不在'close'上对fd.on使用return,=>。。。您可以继续使用req.body中的图像数据。例如,这将打印图像的缓冲区:fd.on'close',=>res.send{status:'OK'};console.logreq.body;