国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Electron中實現大文件上傳和斷點續傳功能

2019-11-19 12:37:31
字體:
來源:轉載
供稿:網友

Electron官網的描述:Electron是由Github開發,用HTML,CSS和JavaScript來構建跨平臺桌面應用程序的一個開源庫。 Electron通過將Chromium和Node.js合并到同一個運行時環境中,并將其打包為Mac,Windows和Linux系統下的應用來實現這一目的。

從官網的描述我們可以簡單的概括,Electron是開源的框架,可以使用h5來開發跨平臺pc桌面應用,這樣前端開發這可以開發桌面應用了。由于它是基于Chromium和Node.js開發的,所以在Electron中既可以使用瀏覽器中的api也可以使用node的api。

下面我們在Electron中實現文件的上傳以及斷點續傳。網上關于h5的上傳下載的案例已經非常多,但是關于大文件的上傳和續傳的很少。

首先上傳方案,我們通過將大文件進行分片處理,將大文件切割成固定大小的分片。通過node的fs.createReadStream方法實現:

singleUpload function(file){  let path = file.path; //文件本地路徑   let stats = fs.statSync(path);//讀取文件信息  let chunkSize = 3*1024*1024;//每片分塊的大小3M  let size = stats.size;//文件大小  let pieces = Math.ceil(size / chunkSize);//總共的分片數   function uploadPiece (i){     //計算每塊的結束位置    let enddata = Math.min(size, (i + 1) * chunkSize);    let arr = [];    //創建一個readStream對象,根據文件起始位置和結束位置讀取固定的分片    let readStream = fs.createReadStream(path, { start: i * chunkSize, end: enddata-1 });      //on data讀取數據      readStream.on(‘data‘, (data)=>{        arr.push(data)      })       //on end在該分片讀取完成時觸發      readStream.on(‘end‘, ()=>{        //這里服務端只接受blob對象,需要把原始的數據流轉成blob對象,這塊為了配合后端才轉        let blob = new Blob(arr)        //新建formdata數據對象        var formdata = new FormData();        let md5Val = md5(Buffer.concat(arr));        formdata.append("file", blob);        console.log(‘blob.size‘,blob.size)        formdata.append("md5", md5Val);        formdata.append("size", size + ‘‘); // 數字30被轉換成字符串"30"        formdata.append("chunk", i + ‘‘);//第幾個分片,從0開始        formdata.append("chunks", pieces + ‘‘);//分片數        formdata.append("name", name);//文件名        post(formdata)//這里是偽代碼,實現上傳,開發者自己實現  }} 

以上代碼就是上傳的核心部分,我們首先讀取文件的基本信息,如路徑,大小進行分塊,然后將每塊上傳,我們上傳循環上傳整個文件的分片,就循環調用uploadpiece方法。那么我們怎么實現斷點續傳呢?上面的代碼中我們計算每塊的md5值,這里計算每個md5值就是為了斷點續傳使用。我們每次上傳文件前,我們會先調用預上傳接口,預上傳接口中,前端傳入fileId,后端會將改文件已經上傳的分塊的md5數組傳給前端,前端將該文件的分塊的md5值和后端返回的md5值進行逐個對比,跳過已經上傳的分塊。這樣就實現了大文件的上傳和斷點續傳的問題。

方案流程圖:

總結

以上所述是小編給大家介紹的Electron中實現大文件上傳和斷點續傳功能,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 侯马市| 志丹县| 洞口县| 延津县| 鹰潭市| 疏附县| 仁化县| 徐州市| 商城县| 屯门区| 淮南市| 得荣县| 图片| 西畴县| 马龙县| 紫金县| 双鸭山市| 永仁县| 凤阳县| 安陆市| 富源县| 保靖县| 黄平县| 南部县| 汶川县| 上饶市| 霍城县| 普兰店市| 开封市| 奉化市| 古蔺县| 隆尧县| 垦利县| 江山市| 泸州市| 肥城市| 临泽县| 兴国县| 工布江达县| 神农架林区| 余庆县|