Node.js Невозможно преобразовать сжатый x-zip в приложение / zip - PullRequest
0 голосов
/ 22 октября 2018

Вот часть моего кода, которая загружает zip-файл, загруженный в BLOB-объект Azure, и отправляет его вызывающей стороне.

Тип содержимого, возвращаемый Azure, application/x-zip-compressed.Тем не менее, мне нужно вернуть application/zip.Если я не установил заголовок в моем коде, он возвращает text/plain; charset=utf-8.Если я устанавливаю заголовок, как в моем коде ниже, он возвращает application/zip; charset=utf-8.В результате, даже если файл загружен, я не могу открыть его с помощью winzip.

У меня вопрос, как мне преобразовать файл в application/zip?

var express = require('express');
var request = require('request');
var router = express.Router();

router.post('/', function (req, res) {
request.get("https://path-to-my-azure-storage-blob/"+ fileName, function (error, response, body) {
  if (error){
    console.log('error:', error); // Print the error if one occurred
  } else {
      console.log("Status Code: ", response.statusCode)
      console.log("Content-type: ", response.headers['content-type'])
      res = {
      "status": 200,
      "headers": {
        'Content-Type': 'application/zip'
       },
      "body": body
    };
    res.end();
  }
});

})

1 Ответ

0 голосов
/ 23 октября 2018

Почему загруженный blob / zip 'поврежден', здесь можно ответить https://stackoverflow.com/a/12029764/1225266

Так что решение (которое можно упростить еще больше, если хотите)

request.get("https:/....blob.core.windows.net/folder/some.zip", null)
    .on('error', (error) => {
        console.log(error);
    })
    .on('response', function(response) {
        res.writeHead(200, {
            'Content-Type': response.headers['content-type'],
            'Content-disposition': 'attachment;filename=anotherfilename.zip',
            'Content-Length': response.headers['content-length']
        }); 
      })
    .on('data', (d) => {
        res.write(d);
    })
    .on('end', () => {
        res.end()
    });

Вы можете узнать, как передать ответ от Azure напрямую клиенту, здесь https://github.com/request/request#streaming

...