第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

斷點(diǎn)續(xù)傳問題

斷點(diǎn)續(xù)傳問題

慕工程0101907 2019-03-12 14:15:04
我的需求簡單描述為: 對于大文件按照一定的chunkSize大小切分為許多小文件上傳存儲在mongodb中, 下載時(shí)通過node.js發(fā)起n(n為切分的小文件的個(gè)數(shù))個(gè)下載請求,每個(gè)請求請求 一部分?jǐn)?shù)據(jù),最后通過writeStream寫入到同一個(gè)文件中。系統(tǒng)的整體流程描述如上?,F(xiàn)在要做的工作是: 上述的功能已經(jīng)完成,現(xiàn)在要做的是下載過程中的斷點(diǎn)續(xù)傳問題,即就是下載時(shí)如何 本地文件中已有該部分?jǐn)?shù)據(jù)則跳過該部分的下載。遇到的問題:現(xiàn)在的問題是,如何用簡單的方法判斷文件中的某一個(gè)部分是否已經(jīng)存在(我想簡單的通過判斷某一塊的第一個(gè)<0>和最后一個(gè)<chunkSize-1>處的文件描述符是否有內(nèi)容來判斷此塊是否已經(jīng)下載完成),請問各位碼友Node.js中的文件描述符fd是否已有像C語言中的seek方法(文件描述符移動到指定的位置),移動到指定位置后怎么判斷此處是否有內(nèi)容。謝謝各位碼友。下載部分的代碼如下(其中downloadpromise是我自己封裝的用來下載每一塊數(shù)據(jù)的Promise): function download(filedata,username,chunkSize) { var chunks_n = Math.ceil(filedata.length/filedata.chunkSize); var file_id = filedata._id; var DLpromiseall = []; //創(chuàng)建對應(yīng)的文件,為以后createWrite而使用 fs.open(filedata.filename, "a", (err, fs) => {     if (err) {         console.log(err);     } })  for(let curindex = 0;curindex < chunks_n;curindex++) {     DLpromiseall.push(downloadpromise(username,file_id,curindex,filedata.filename,chunkSize)); } var mytimer = setInterval(() => {     if(DLpromiseall.length == chunks_n) {         clearInterval(mytimer);         Promise.all(DLpromiseall).then(vales=>{             console.log(vales);             console.log("all download")         }).catch(err =>{             console.log(err);             console.log("下載失敗");         })     } },500)}downloadPromise函數(shù)如下:
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

上述的功能已經(jīng)完成,現(xiàn)在要做的是下載過程中的斷點(diǎn)續(xù)傳問題,即就是下載時(shí)如何
本地文件中已有該部分?jǐn)?shù)據(jù)則跳過該部分的下載。

在原有的http協(xié)議,客戶端會通過Range請求服務(wù)器要返回的部分內(nèi)容(先判斷本地已經(jīng)下載了幾個(gè)字節(jié)),服務(wù)端通過Content-Range告知客戶端目前返回下來的部分內(nèi)容。而你這里多出來的一部只是分塊而已,都是一樣的。

通過option.start指定文件流開始的位置。

fs.createReadStream(filePath, {

     start: startRange,

     end : endRange //如果需要

});


查看完整回答
反對 回復(fù) 2019-03-30
?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

暫時(shí)想到了一個(gè)不是很成熟的想法,通過判斷每一塊里面是否有寫入的內(nèi)容,以及寫入的內(nèi)容是否達(dá)到規(guī)定寫入的標(biāo)準(zhǔn)。代碼如下


function readPromise(filepath,i,options) {

    return new Promise(function (resolve,reject) {

        let flag = false;

        let readStream = fs.createReadStream(filepath,options);

        readStream.on("data",(chunk)=>{

            let chunString = chunk.toString().trim();

            let nsize = options.end - options.start + 1;

            if(!chunString||chunString.length < nsize) {

                flag = true;

            }

        })

        readStream.on("close",(ele) => {

            resolve(flag);

        })

        readStream.on("error",(e) => {

            reject(e);

        })

    })

}


查看完整回答
反對 回復(fù) 2019-03-30
  • 2 回答
  • 0 關(guān)注
  • 407 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號