Я разрабатываю приложение с 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}}': '' }