Узел express - при загрузке pdf с помощью multer и ax ios создается пустой PDF-файл с [object, Object] - PullRequest
0 голосов
/ 16 июня 2020

При загрузке pdf с помощью ax ios (клиент) и multer (сервер) файл попадает на сервер. Однако, когда я использую writeFileSync(), он просто создает PDF-файл с [object, Object] внутри него. Вот как выглядит объект в req.file:

{
   fieldname: 'file',
   originalname: '307.pdf',
   encoding: '7bit',
   mimetype: 'application/pdf',
   buffer: <Buffer 25 50 44 46 2d 31 2e 34 0d 25 e2 e3 cf d3 0d 0a 31 33 32 36 20 30 20 6f 62 6a 0d 3c 3c 2f 4c 69 6e 65 61 72 69 7a 65 64 20 31 2f 4c 20 35 36 31 37 30 ... 561656 more bytes>,
   size: 561706
 }

Я попытался записать req.file.buffer в файл pdf, который записывает больше гиббери sh в pdf, но это неправильно закодировано. Есть ли какие-то настройки кодировки, которые мне где-то не хватает?

Код клиента:

handle307Upload(e) {

    const dataForm = new FormData();
    dataForm.append('file', e.target.files[0]);

    axios.post('http://localhost:4001/importalpha', dataForm)
            .then(res => console.log(res))
            .catch(err => console.log(err));
}

Код маршрута:

module.exports = function(req, res, next) {

     const file  = req.file;
     fs.writeFileSync(join(__dirname, '307.pdf'), file);
}

Код сервера: (удалено некоторые для краткости)

const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
const importAlphaRoute = require('../routes/import-alpha');

const upload = multer({});

const app = express();

app.use(bodyParser.urlencoded({ extended: true, limit: '5mb' }));
app.use(bodyParser.json({limit: '5mb'}));

app.post('/importalpha', upload.single('file'), importAlphaRoute);

Любая помощь очень ценится. Все пробовал безрезультатно.

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Для загрузки файла с помощью multer вам нужно написать папку назначения, в которой вам нужно сохранить файл

Обновите свой код следующим образом

const upload = multer({ dest: 'uploads/' })
0 голосов
/ 16 июня 2020

Я собирался удалить этот вопрос (не могу, потому что есть ответ), поскольку PDF-файл загружается нормально. Я думал, что это gibberi sh, но это не так. Я воспользуюсь этим, чтобы объяснить, почему мой код действительно работает.

Я я могу записать файл на диск, используя:

const upload = multer({});

Я не необходимо указать здесь путь, например multer({ dest: 'uploads/' }), поскольку я сохраняю с помощью fs.writeFileSync() вместо использования встроенной функции Multer.

После отправки объекта формы на сервер я могу запишите pdf на диск, используя свойство buffer объекта файла, например:

 fs.writeFileSync(join(__dirname, '307.pdf'), file.buffer);

Я упоминаю об этом (file.buffer) в OP, тогда как я думал, что он неправильно записывает файл pdf на данный момент, однако, на самом деле pdf создается правильно.

...