Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 通过writeStream下载csv时出现奇怪的结果_Node.js_Csv - Fatal编程技术网

Node.js 通过writeStream下载csv时出现奇怪的结果

Node.js 通过writeStream下载csv时出现奇怪的结果,node.js,csv,Node.js,Csv,我在nodejs服务器上有一个函数,可以从链接下载CSV文件,下载后,它会运行解析函数 URL的格式如下: http://myprovider/grails/mgmt/downloadFile.dispatch?uid=12345&username=Lucas&password=Password 但后来我们的数据提供商转向了需要基本身份验证的链接 因此,新函数看起来是这样的——如果我复制并粘贴到Chrome中,我正在构建的URL可以正常工作,因此它是有效的。我所说的作品是指下载CSV文件 fun

我在nodejs服务器上有一个函数,可以从链接下载CSV文件,下载后,它会运行解析函数

URL的格式如下:

http://myprovider/grails/mgmt/downloadFile.dispatch?uid=12345&username=Lucas&password=Password

但后来我们的数据提供商转向了需要基本身份验证的链接

因此,新函数看起来是这样的——如果我复制并粘贴到Chrome中,我正在构建的URL可以正常工作,因此它是有效的。我所说的作品是指下载CSV文件

function getItemCSVwithAuth(ItemLinkObject) {

    var ItemName=ItemLinkObject.nameLabel;
    var ItemURL='https://'+username+':'password+'@'+ItemLinkObject.url;

    var writeStream = fs.createWriteStream(ItemDownloadPath.concat(ItemName).concat('.csv'));
    writeStream.on('finish', function() {    
        loadItemCSV(ItemName);
    })
    request({
        method: 'GET',
        uri: ItemURL,    
    }).pipe(writeStream)
}
问题是,当我在节点服务器上执行此请求时,生成的CSV文件非常奇怪,只有440字节,而不是预期的2KB,当我在sublime中打开它时,它看起来如下所示:

1f8b 0800 0000 0000 0400 a594 dd6a dc30
1085 ef0b 7d07 3f80 6035 3fd2 48bd dba4
49ae 5296 26f4 dec4 4a10 ac63 70ec bc5c
2ffa 487d 858e b7a1 6c31 1595 8397 99c5    
307a f1a5 1608 0000 

响应的前两个字节1f8b表示响应是gzip压缩的,这在HTTP响应中很常见,但通常情况下,客户端必须明确告诉服务器它支持这种压缩,我认为请求不支持这种压缩

要在请求中启用解压缩,请启用gzip选项:


我会尝试postman来确定问题的来源。或者,您可以删除管道,添加常规回调以查看内容是如何接收的。1f8b前两个字节表示数据是gzip压缩的,尝试在传递给的选项中设置gzip:truerequest@robertklep这是非常有线的,因为在chrome浏览器中粘贴相同的链接会导致csv下载非压缩chrome会为您解压数据,默认情况下请求不会生效。
1f8b 0800 0000 0000 0400 a594 dd6a dc30
1085 ef0b 7d07 3f80 6035 3fd2 48bd dba4
49ae 5296 26f4 dec4 4a10 ac63 70ec bc5c
2ffa 487d 858e b7a1 6c31 1595 8397 99c5    
307a f1a5 1608 0000 
request({
  method : 'GET',
  uri    : ItemURL,   
  gzip   : true, 
}).pipe(writeStream)