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

时间:2019-01-04 07:08:21

标签: node.js file-upload busboy

我想在POST的正文中上传一个二进制文件。

我不想使用multipart/form-data

(据我所知multipart/form-data是一种适用于Web应用程序的易于使用的技术,但不适用于移动应用程序。我没有Web应用程序,我只是在构建移动应用程序。)< / p>

我尝试使用busboy,但在非multipart/form-data的上传中找不到任何内容。 express-fileupload也使用相同的AFAIK。

1 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您想创建一个路由,该路由将用于将文件上传到服务器。一种方法是将body-parser表达式中间件与写流结合使用:

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

发送以下请求会将文件上传到[SERVER_UPLOAD_PATH]:

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

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