File Upload Express + Multer не является парсингом тела - PullRequest
0 голосов
/ 28 июня 2019

Я разрабатываю приложение с Electron + React (интерфейсная часть) и Express + Multer (фоновая часть).Идея состоит в том, чтобы отправлять файлы (multipart / form-data) на сервер и отправлять их в Google Storage, что я уже сделал с помощью Postman.Экспресс и Малтер работали нормально.

Когда я пытаюсь из Front-End, Малтер не может разобрать тело.Для тестов я использую небольшой текстовый файл (upload.txt):

FRONT-END

function processUpload (file) {

    const form = new FormData();

    const fileStream = fs.createReadStream(file.filepath);

    form.append('file', fileStream, file.name);

    // Axios instance was setup in other File
    Services.Api.post('/files', form, {headers:{'content-type': 'application/x-www-form-urlencoded'}})
        .catch((e)=>{console.log(e.response)});

}

BACK-END

    [...]

    app.use(cors());
    app.use(express.urlencoded({ extended: true, parameterLimit:50000, 
    limit:'50mb' }));
    app.use(express.json({limit:'50mb'}));

    [...]

    // Storage: multer.memorystorage()
    routes.post('/files', multer(multerConfig).single('file'), Storage.verifyLimit, Storage.upload, Files.create);

РЕЗУЛЬТАТЫ

Пакет, который я использую для создания FormData, это 'form-data', который в Back-end возвращает тело:

body: { '----------------------------766552364827079615171368\r\nContent-Disposition: form-data; name':
   '"file"; filename="upload.txt"\r\nContent-Type: text/plain\r\n\r\ntesteasdasd\r\n----------------------------766552364827079615171368--\r\n' }

Я также попробовал 'formdata-node', в результате чего:

body: { '{"__carriage":"\\r\\n","__defaultContentType":"application/octet-steam","__dashes":"--","__boundary":"NodeJSFormDataStreamJsZfV2g90A6AxrOTEjBcw9","__content":{},"__curr":{},"__stream":{"_readableState":{"objectMode":false,"highWaterMark":16384,"buffer":{"head":null,"tail":null,"length":0},"length":0,"pipes":null,"pipesCount":0,"flowing":null,"ended":false,"endEmitted":false,"reading":false,"sync":true,"needReadable":false,"emittedReadable":false,"readableListening":false,"resumeScheduled":false,"emitClose":true,"destroyed":false,"defaultEncoding":"utf8","awaitDrain":0,"readingMore":false,"decoder":null,"encoding":null},"readable":true,"_events":{},"_eventsCount":0}}': '' }
...