通过writeStream

时间:2017-06-30 10:22:21

标签: node.js csv

我的nodejs服务器上有一个从链接下载CSV文件的功能,然后一旦下载,它就会运行解析功能。

网址格式如下:

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

function getItemCSVsingle(ItemLinkObject) {

    var ItemName=ItemLinkObject.nameLabel;
    var ItemURL=ItemLinkObject.url;

    var writeStream = fs.createWriteStream(ItemDownloadPath.concat(ItemName).concat('.csv'));
    writeStream.on('finish', function() {        
        loadItemCSV(ItemName);
    })
    request({
        method: 'GET',
        uri: ItemURL,
    }).pipe(writeStream)
}

但随后我们的数据提供商切换到需要基本身份验证的链接。

所以新功能看起来像这样 - ,如果我将其复制并粘贴到Chrome中,我构建的网址就可以正常运行,因此它有效。按我的意思是它导致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 

1 个答案:

答案 0 :(得分:1)

响应的前两个字节php表示响应是gzip压缩的(这对HTTP响应很常见,但通常情况下,客户端必须专门告诉服务器它支持这种压缩,我不认为Undefined property: stdClass::$size 会这样做。

要在1f8b中启用解压缩,请启用request选项:

request