Принять двоичный файл в теле запроса на сервере node.js
Я хочу загрузить двоичный файл в теле POST
,
Я не хочу использовать multipart/form-data
,
(Насколько я знаю multipart/form-data
это простая в использовании технология для веб-приложений, но не простая для мобильных приложений. У меня нет веб-приложения, я просто создаю мобильные приложения.)
Я пытался использовать busboy, но не смог найти ничего на не multipart/form-data
добавления. express-fileupload
также использует то же самое AFAIK.
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
Приведенный выше пример используется для загрузки изображений на сервер, но вы можете изменить его соответствующим образом. Обратите внимание, что вам нужно будет проверить тип файла, чтобы убедиться, что пользователи загружают только те типы файлов, для которых они предназначены.