Введение:
С 11 февраля 2020 года request
полностью устарела. Никаких новых изменений не ожидается. Фактически, ни один из них не приземлялся какое-то время. Этот пакет также не рекомендуется, поскольку он зависит от запроса. - https://github.com/request/request-promise
Я использовал npm request-promise
для отправки файлов из серверной части узла в restify
конечные точки. К сожалению, request-promise
устарел, поэтому я переключаюсь на node-fetch
.
с обещанием запроса мне удалось создать запрос примерно так:
const formData = {
file: {
value: file,
options: {
filename: 'someFileName.xlsx',
contentType: 'image/jpg'
}
}
}
const requestOptions = { ...., formData };
return requestPromiseFetch(url, requestOptions).then(response => { ....});
И получить файл из запроса в разделе "files" req.files.file.path
Это также работает при получении файлов из выборки браузера, что в chrome сетевом запросе выглядит так:
"postData": {
"mimeType": "multipart/form-data; boundary=----WebKitFormBoundaryE6T9nfRvBAScnlki",
"text": "------WebKitFormBoundaryE6T9nfRvBAScnlki\r\nContent-Disposition: form-data; name=\"file\"; filename=\"importTest.xlsx\"\r\nContent-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\r\n\r\n\r\n------WebKitFormBoundaryE6T9nfRvBAScnlki--\r\n",
"params": [
{
"name": "file",
"value": "(binary)"
}
]
}
На бэкэнде я красиво получаю файл из запроса браузера следующим образом:
async function receivingFile (req) {
console.log(req.files);
const result = await schema.importer.importingFile({ fullPath: req.files.file.path });
return { result };
}
выводит console.log:
{
file: File {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
size: 4803,
path: '/var/folders/jv/py0twd4d2dgfslwry_ch8_tm0000gp/T/upload_3ba513d3d1ee5912c1d20067c3775c47.xlsx',
name: 'importTest.xlsx',
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
hash: null,
lastModifiedDate: 2020-05-05T11:18:24.421Z,
_writeStream: WriteStream {
_writableState: [WritableState],
writable: false,
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
path: '/var/folders/jv/py0twd4d2dgfslwry_ch8_tm0000gp/T/upload_3ba513d3d1ee5912c1d20067c3775c47.xlsx',
fd: null,
flags: 'w',
mode: 438,
start: undefined,
autoClose: true,
pos: undefined,
bytesWritten: 4803,
closed: true
}
}
}
Я не хотел, чтобы полученный запрос от node-fetch
выглядел так же, чтобы я мог получить файл точно так же, как я получаю его, когда он отправляется с помощью выборки браузера, и как раньше, когда отправлялся request-promise
Я прочитал этот вопрос: Как отправить файл в запросе node-fetch или Node? Но ни один из ответов не помог мне получить тот же результат, что и при использовании request-promise
для создания http-запроса.