выполнить HTTP-запрос с использованием типа содержимого приложения / октет-потока — узел js

#node.js #file-upload

#node.js #загрузка файла

Вопрос:

На данный момент я использую запрос модуля npm для загрузки файла с типом содержимого application / octet-stream. Проблема в том, что я не могу получить тело ответа обратно. Это происходит из-за известной ошибки:https://github.com/request/request/issues/3108

Можете ли вы предоставить мне альтернативные способы загрузки файла в API с типом содержимого application / octet-stream?

Ответ №1:

Вы пробовали загружать файл в буфер, а не в поток? Я понимаю, что во многих контекстах поток предпочтительнее, но часто приемлема просто загрузка в память. Я использовал этот подход без проблем:

 const imageBuffer = fs.readFileSync(fileName); // Set filename here..

const options = {
    uri: url, /* Set url here. */
    body: imageBuffer,
    headers: {
        'Content-Type': 'application/octet-stream'
    }
};


request.post(options, (error, response, body) => {
if (error) {
    console.log('Error: ', error);
    return;
}
  

Чтобы сделать то же самое, используя поток:

 const options = {
    uri: url, /* Set url here. */
    body: fs.createReadStream(fileName),
    headers: {
        'Content-Type': 'application/octet-stream'
    }
};

request.post(options, (error, response, body) => {
if (error) {
    console.log('Error: ', error);
    return;
}
..
  

Комментарии:

1. Спасибо, это решение работает! В любом случае, я думаю, что лучше делать это с потоками, потому что видео будут загружаться с помощью этой программы, и размер может быть действительно большим.

2. Если вы имеете дело с большими файлами, вы должны использовать streams в порядке!

3. Можете ли вы привести пример, как сделать то же самое с потоком?

4. @Keven, я обновил пример с использованием потока.