Размер изображения, загруженного с узла, составляет 209 байт, но изображение доступно в Chrome. - PullRequest
0 голосов
/ 14 марта 2019

Я загружаю изображения через узел. По большей части это работает правильно, однако некоторые изображения сохраняются с 209 bytes. Но при просмотре этих изображений непосредственно в Chrome изображения открываются совершенно нормально.

Заголовки

headers:
connection: "close"
content-length: "209"
content-type: "text/html"
date: "Thu, 14 Mar 2019 00:03:39 GMT"
expires: "Thu, 14 Mar 2019 00:03:39 GMT"
mime-version: "1.0"

Состояние

statusCode: 400
statusMessage: "Bad Request"

Используемый код

const download = async function(uri, filename){
  return new Promise((resolve, reject) => {
    request.head(uri, function(err, res) {
      if (res) {          
        request(uri).pipe(fs.createWriteStream(filename)).on('close', resolve);
      } else {
        reject(uri);
      }
    });
  })
};

const downloadImages = async function (dirName, images){
    if (await !fs.existsSync(dirName)){
      await fs.mkdirSync(dirName);
    }
    await asyncForEach(JSON.parse(images), async (image, index) => {
      const fileName = `${dirName}/${index}.jpg`;
      try {
        await readFile(fileName)
      }
      catch (err){
        if(err) {
          try {
            await download(image, fileName);
          } catch (error) {
            console.error(error);
          }
        }
      }
    })
}

1 Ответ

1 голос
/ 14 марта 2019

Добавьте 2 заголовка к вашему запросу:

Accept: image/jpeg
Accept-Encoding: gzip, deflate

Пример:

request({
  uri: uri,
  headers: {
    'Accept': 'image/jpeg',
    'Accept-Encoding': 'gzip, deflate'
  }
}).pipe(fs.createWriteStream(filename)).on('close', resolve);

РЕДАКТИРОВАТЬ Некоторое объяснение

Проблема всервер, а не в клиенте.

Поскольку в Chrome он работает, вы можете попытаться воспроизвести запрос Chrome, скопировав все заголовки запроса в код node.js.

Как только код заработает, попробуйтеудалить один за другим, чтобы увидеть, что необходимо.
Для меня это работало только с 2 упомянутыми

Chrome DevTools

...