簡體   English   中英

下載的文件被保存了兩次?

[英]Downloaded file gets saved two times?

我想下載一個 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 有一個重定向,我正在使用這個 package 作為httpshttps://www.npmjs.com/package/follow-redirects

該庫工作正常,它沒有被保存兩次:你沒有正確處理傳入的數據:它不是String ,它是Buffer ,所以你需要推送每個塊,然后合並它們並將它們傳遞給 writer:

var body = [];

response.on("data", function (chunk) {
    body.push(chunk);
});

response.on("end", function () {
    callback(Buffer.concat(body));
});

或者您可以簡單地 pipe 響應writeStream並用一行代碼替換所有代碼:

const zip = fs.createWriteStream("test.zip");

//...

response.pipe(zip);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM