Принять двоичный файл в теле запроса на сервере node.js - PullRequest
0 голосов
/ 04 января 2019

Я хочу загрузить двоичный файл в теле POST.

Я НЕ хочу использовать multipart/form-data.

(Насколько я знаю multipart/form-data - это простая в использовании технология для веб-приложений, но нелегкая для мобильных приложений. У меня нет веб-приложения, я просто создаю мобильные приложения.)

Я пытался использовать busboy, но не смог найти ничего при загрузке не multipart/form-data.express-fileupload также использует то же самое AFAIK.

1 Ответ

0 голосов
/ 04 января 2019

Так что, если я правильно понимаю, вы хотите создать маршрут, который будет использоваться для загрузки файлов на сервер.Один из способов сделать это - использовать промежуточное программное обеспечение 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

Приведенный выше пример используется для загрузки изображений на сервер, но вы можете изменить его соответствующим образом.Обратите внимание, что вам нужно будет проверить тип файла, чтобы убедиться, что пользователи загружают только те типы файлов, для которых они предназначены.

...