Node.js无法将x-zip压缩的文件转换为application / zip

时间:2018-10-22 19:23:12

标签: node.js zip azure-storage-blobs mime-types npm-request

这是我的代码的一部分,该代码将提取一个上传到Azure blob的zip文件,然后将其发送回调用方。

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 :(得分:0)

在这里https://stackoverflow.com/a/12029764/1225266

回答为什么下载的blob / zip是“ corrupt”的

因此解决方案是(可以根据需要进一步简化)

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()
    });

您可以在https://github.com/request/request#streaming

处了解如何将响应从天青直接传送到客户端。