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

标签 node.js file-upload busboy

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

我不想使用multipart/form-data

(据我所知,multipart/form-data对于网络应用程序来说是一种易于使用的技术,但对于移动应用程序来说并不容易。我没有网络应用程序,我只是构建移动应用程序。)

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

最佳答案

所以,如果我理解正确的话,您想要创建一个用于将文件上传到服务器的路由。实现此目的的一种方法是使用 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'});
});

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

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

上面的例子是用来上传图片到服务器的,但是你可以做相应的修改。请注意,您需要检查文件类型,以确保用户仅上传他们应该上传的文件类型。

关于node.js - 在 Node.js 服务器上接受请求正文中的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54034468/

相关文章:

node.js - 将 connect-multiparty 与 express.js 一起使用的正确方法是什么?

javascript - 使用 Jest CLI 时如何让 Promises 工作?

ios - MySQL 数据库字段更新应该在 ios 中触发函数

javascript - mongodb 重新索引集合不起作用

asp.net-mvc - 如果我使用 AJAX,文件上传过程中的 HttpPostedFile 为 NULL

node.js - req.busboy.on ('file' ) 不开火

node.js - Git diff 不适用于 Windows 绝对路径

asp.net - 以编程方式访问 httpRuntime maxRequestLength

javascript - 如何在ajax错误时显示文件上传错误消息?

firebase - 在 Cloud Functions 中使用 Express 处理多部分/表单数据 POST