nodejs的请求模块没有给出块的响应

问题描述:

我有一个要求是使用nodejs从服务器下载文件。nodejs的请求模块没有给出块的响应

下面是我的代码来下载文件。

test.js

function downloadFile() { 

    var fsModule = 'fs'; 
    var fs  = require(fsModule); 
    var request = require('request'); 
    var deferred = $q.defer(); 

    var downloadRequest = request.get({ 
      encoding: null, 
      url: 'https://test.com/api/assets/35007/raw', 
      headers: { 
       'Authorization': 'Basic AuthorizationValue' 
      } 
    }); 

    downloadRequest.addListener('response', function (response) { 

     if (response.statusCode != 200) { 
      console.log('Error in downloading file'); 
      deferred.resolve(false); 
     } else { 
      var options = {defaultEncoding: 'binary'}; 
      var writeStream = fs.createWriteStream('c:/testDownloadFile.mp4', options); 

      response.addListener('data', function (chunk) { 
       console.log('chunk length - ',chunk.length); 
       writeStream.write(chunk); 
      }); 
      response.addListener("end", function() { 
       writeStream.end(); 
       console.log('No error in download and resolved true'); 
       deferred.resolve(true); 
      }); 
     } 
    }); 
} 
downloadFile(); 

我可以使用节点通过以下命令成功运行此代码,它给出了块的响应。所以这个代码没有内存问题。

节点test.js

但是当我使用browserify在浏览器中运行该代码,那么它不会给在块响应。所以它会造成大尺寸文件的问题。

  1. 是否有browserify请求/缓冲模块的任何问题?
  2. 该问题的根本原因是什么?
  3. 你能否给我提供解决方案或备用方法来下载文件块?

节点版本: 6.9.2

browserify:^12.0.0

的 'HTTP' 由browserify使用是不一样的通过的NodeJS使用的模块,它是在客户端运行时由脚本修改。此外,浏览器以不同的方式处理请求。

因此,修改后的'http'或浏览器可能会缓存块并将它们放在一起。

+0

感谢您的回复,但代码没有任何CORS错误。我也可以下载文件,但不能分块。 –

+0

@NIravModi我这么粗心......我已经更新了它。我想答案可以在'http'模块和'request'模块中找到。 – wyj

只是一个简短的建议什么是值得的......在你的测试环境中,你有没有在浏览器中测试时没有使用的缓存中的任何模块。我提出了这个建议,因为q模块没有要求。

关注

+0

这是一个示例代码。 –