大型文件在nodejs下载失败

我有一个服务,build立一个CSV文件,并将其返回给用户。 目前使用的是expressjs v4.14,nodejs v8.7.0。 我的问题是,我得到一个下载失败,因为在Chrome浏览器中的“networking错误”,当我打电话给它的服务来创build一个大型的CSV文件。 用较小的文件,服务工作正常。 我也可以浏览到/temp/文件夹,并且存在整个预期的文件。 在每一件“我试过的东西”中,我都可以下载较小的文件,但不能下载较大的文件。

服务:

 download.post('/csv', (req, res, next) => { res.status(200).header('Content-Type', 'text/csv'); const newUUID = uuid.v1(); let ws: WriteStream = fs.createWriteStream(`${__dirname}/../../temp/${newUUID}.csv`); ws.on('finish', () => { res.download(`${__dirname}/../../temp/${newUUID}.csv`); }); //csv file built here ws.write('huge stuff easily 50k rows and 10 mb file'); ws.end(); }); 

Chrome错误:

Chrome的networking标签和开发者控制台不会告诉我发生了什么事情。 这下载popup是我得到的。 为了以防万一,我清除了cookies / cache中的所有内容,并没有帮助。

在这里输入图像描述

我试过的东西:

  • 直接将数据块写入响应stream。
  • 使用可读streamhttps://nodejs.org/api/stream.html#stream_readable_streams ,将string转换为字节并pipe道。
  • 在本地创build一个文件(writestream)并将其stream回(readstream pipe into res)
  • 写入stream创build本地文件结束后res.download(文件)

更新:

结束了从邮递员尝试服务,它的工作,所以我认为这是一个angularjs问题。

Angularjs

  $http({ cache: false, url: "/download/csv", headers: { 'accept': 'text/csv' }, method: 'POST', data: { rows: rows, title: title ? title : '' } }).success(function (data, status, headers, config) { var anchor = angular.element('<a/>'); anchor.attr({ href: 'data:attachment/csv;charset=utf-8,' + encodeURI(data), target: '_blank', download: 'csv_info.csv' })[0].click(); }).error(function (data, status, headers, config) { }); 

       

网上收集的解决方案 "大型文件在nodejs下载失败"

原来是在angularjs中创build的anchor标记的href属性的一个限制。 这是使用FileSaver解决的:

 $http({ cache: false, url: "/download/csv", headers: { 'accept': 'text/csv' }, method: 'POST', data: { rows: rows, title: title ? title : '' } }).success(function (data, status, headers, config) { var file = new File([data], "info.csv", {type: "text/csv;charset=utf-8"}); saveAs(file); }).error(function (data, status, headers, config) { });