在节点js中未打开下载的tar文件。

时间:2019-05-17 11:30:59

标签: javascript node.js

我正在尝试使用节点js下载tar文件,文件正在保存但无法打开该文件,我尝试了以下代码

var fs = require("fs");
var fn = "version1.tgz";
var request = require('request');
var downloadUrl = "https://url/api/download?downloadFile="+fn+"&username=mkhun";
request({
    url: downloadUrl,
    method: 'POST',
}, function (err, resp, body) {
    var rmv = body;
    console.log(rmv);
    fs.writeFile(fn,rmv,function(err,data){
            console.log(err);
    });
});

但是同样的事情也可以使用javascript ajax

var fn = "version1.tgz";
var xhttp = new XMLHttpRequest();
var downloadUrl = "https://url/api/download?downloadFile="+fn+"&username=mkhun";
console.log(downloadUrl);
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
    var blob = this.response;
     var fileName = fn;
     var link=document.createElement('a');
     link.href=window.URL.createObjectURL(blob);
     link.download=fileName;
     link.click();

} else if(this.readyState == 2) {
        xhttp.responseType = "blob";
    }
};
xhttp.open("POST", downloadUrl , true);
xhttp.send();

我不知道如何用node-red解决此问题

1 个答案:

答案 0 :(得分:1)

这是接收请求数据时的编码问题。

您可以使用streams将请求直接从Buffer pipe进入文件系统。否则,您可以在encoding: null选项中使用request

request({
    url: downloadUrl,
    method: 'POST',
    encoding: null
}, ...)