如何正確地把服務器端返回的文件二進制流寫入到本地保存成文件


我使用 Node.js 的 request 工具庫,請求服務器端的視頻文件,保存到本地之后,發現了問題。

我把 url 輸入到瀏覽器里,手動下載視頻文件后,文件大小為 70 多 KB:

然而使用 Node.js 代碼請求文件數據並保存到本地,發現文件尺寸變成 100 多 KB 了,顯然不正確:

經過研究發現,需要使用 request 在發起數據請求之前,添加如下一行語句:

request.defaults({ encoding: null });

完整的數據請求的代碼:

var requestC = request.defaults({ encoding: null });
        
        console.log("get video via url: " + url );
        const fileName = getVideoPartNameByUrl(url);

        requestC(getVideoOptions,function(error,response,body){
            if(error){
                console.log("error occurred: " + error);
                reject(error);
            }
            resolve({
                fileName: fileName,
                fileContent: body
            });
        }); 

文件寫入的代碼:

fs.writeFile(oVideo.fileName, oVideo.fileContent, "binary", function (error) {
        if(error)
            console.log("file writes error");
        else{
            console.log("File: ", oVideo.fileName, " writes ok");
        }
    });

之后問題消失。

更多Jerry的原創文章,盡在:"汪子熙":


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM