我想下载一个文件,windows告诉我是76mb大(右键单击属性说74mb)。但当我下载它与下面的代码,文件将是139mb(属性说142mb)大。似乎文件被保存两次,导致文件损坏。
const fs = require('fs');
const { http, https } = require('follow-redirects');
function download(url, callback) {
var request = https.get(url, function (response) {
var body = "";
response.on("data", function (chunk) {
body += chunk;
});
response.on("end", function () {
callback(body);
});
request.on("error", function (e) {
console.log("Error: " + e.message);
});
});
};
let url = "https://github.com/TheOtherRolesAU/TheOtherRoles/releases/latest/download/TheOtherRoles.zip"
download(url, (body) => {
console.log(body.length)
fs.writeFile("test.zip", body, err => {
if (err) console.error(err)
console.log("Done");
})
})
你知道这是怎么发生的吗?不,download()
不会被调用两次。
编辑:我忘了提到,但我从github下载,在url有一个重定向,我使用这个包作为https
:https://www.npmjs.com/package/follow-redirects
1条答案
按热度按时间kx5bkwkv1#
库工作正常,没有被保存两次:您没有正确处理传入数据:它不是
String
,而是Buffer
,因此您需要推送每个块,然后合并它们并将它们传递给writer:或者,您可以简单地将响应通过管道发送到
writeStream
,并将所有代码替换为一行代码: