node.js - 通过 POST 请求使用 NodeJS/ExpressJS 处理二进制图像或文件
问题描述
我想知道是否有办法处理只包含一个文件的 POST 请求,没有表单,只是一个作为请求正文发送的二进制文件。
const path = require('path');
const express = require('express');
const app = express();
const logger = require('morgan');
// Settings
app.set('port', process.env.PORT || 3000)
// Middlewares
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({extended: true}));
app.post('/upload', (req, res) => {
console.log(req.headers);
let data = ''
req.on('data', chunk => {
data += chunk;
})
req.on('end', () => {
fs.writeFileSync('img.jpg', data)
})
res.send('ok');
})
app.listen(app.get('port'), console.log(`Listening on any ${app.get('port')}`));
我已尝试提出此请求:(对不起,外部链接,我刚刚创建了帐户)
标题:
{
'user-agent': 'PostmanRuntime/7.26.5',
accept: '*/*',
'postman-token': 'aca04fab-a66d-439a-962f-87ede2b8bb98',
host: 'localhost:3000',
connection: 'keep-alive',
'content-length': '73989'
}
并且不工作,img.jpg
只是腐败。
更新:(感谢eol的帮助)
这就是代码现在的工作方式,带有express.raw
内置的中间件:
app.use(express.json());
app.use(express.urlencoded({extended: true}));
app.use(express.raw({type: '*/*'}));
app.post('/upload', (req, res) => {
fs.writeFileSync('img.jpg', req.body);
res.send('ok');
})
解决方案
据我所知,内置的bodyparser应该能够开箱即用。尝试设置它:
app.use(express.raw({type: 'application/octet-stream'}))
然后在您的处理程序内部req.body
应该保存内容的缓冲区:
app.post('/upload', (req, res) => {
// req.body should hold the bindary-data as a buffer
});
推荐阅读
- spring - 在 Spring Boot 应用程序中从外部 JAR 加载模型和 DAO
- excel - Excel VBA 循环优化 - j = 2 时退出
- r - 循环遍历 R 中后续行中的 NA 值
- maven - Maven项目中将java类导入Jsp
- c# - 从 Mac 上的 Rider 附加到 Azure Functions 的调试器
- python - 使用 Python 进行 Web 抓取:解析错误时出现意外的 EOF
- android - 使用 FirestoreRecyclerAdapter 的项目和类别
- java - 在 JList 中显示项目
- android - 在 okhttp3 中超时服务缓存
- javascript - 尝试将更改作为一个整体保存为包含自定义对象的数组中的数组