欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Electron中實現大文件上傳和斷點續(xù)傳功能

 更新時間:2018年10月28日 15:45:50   作者:leejay6567  
Electron是開源的框架,可以使用h5來開發(fā)跨平臺pc桌面應用,這樣前端開發(fā)這可以開發(fā)桌面應用了。這篇文章主要介紹了Electron中實現大文件上傳和斷點續(xù)傳功能,需要的朋友可以參考下

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

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

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

首先上傳方案,我們通過將大文件進行分片處理,將大文件切割成固定大小的分片。通過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 = [];
    //創(chuàng)建一個readStream對象,根據文件起始位置和結束位置讀取固定的分片
    let readStream = fs.createReadStream(path, { start: i * chunkSize, end: enddata-1 });
      //on data讀取數據
      readStream.on(‘data‘, (data)=>{
        arr.push(data)
      }) 
      //on end在該分片讀取完成時觸發(fā)
      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)//這里是偽代碼,實現上傳,開發(fā)者自己實現
  }
} 

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

方案流程圖:

總結

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

相關文章

  • 用函數式編程技術編寫優(yōu)美的 JavaScript_ibm

    用函數式編程技術編寫優(yōu)美的 JavaScript_ibm

    函數式編程語言在學術領域已經存在相當長一段時間了,但是從歷史上看,它們沒有豐富的工具和庫可供使用。隨著 .NET 平臺上的 Haskell 的出現,函數式編程變得更加流行。一些傳統(tǒng)的編程語言,例如 C++ 和 JavaScript,引入了由函數式編程提供的一些構造和特性。在許多情況下,JavaScript 的重復代碼導致了一些拙劣的編碼。如果使用函數式編程,就可以避免這些問題。此外,可以利用函數式編程風格編寫更加優(yōu)美的回調。
    2008-05-05
  • JavaScript數據結構yocto queue隊列鏈表代碼分析

    JavaScript數據結構yocto queue隊列鏈表代碼分析

    這篇文章主要為大家介紹了JavaScript數據結構yocto queue隊列鏈表代碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • JS復制內容到剪切板的實例代碼(兼容IE與火狐)

    JS復制內容到剪切板的實例代碼(兼容IE與火狐)

    這篇文章主要介紹了JS復制內容到剪切板的實例代碼(兼容IE與火狐)。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • JavaScript中各種二進制對象關系的深入講解

    JavaScript中各種二進制對象關系的深入講解

    JavaScript中用于表示二進制對象有,Blob對象、和 ArrayBuffer 對象,這篇文章主要給大家介紹了關于JavaScript中各種二進制對象關系的相關資料,需要的朋友可以參考下
    2021-09-09
  • 原生js封裝二級城市下拉列表的實現代碼

    原生js封裝二級城市下拉列表的實現代碼

    下面小編就為大家?guī)硪黄鷍s封裝二級城市下拉列表的實現代碼。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 使用smartupload組件實現jsp+jdbc上傳下載文件實例解析

    使用smartupload組件實現jsp+jdbc上傳下載文件實例解析

    這篇文章主要介紹了使用smartupload組件實現jsp+jdbc上傳下載文件實例解析,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • js瀏覽器本地存儲store.js介紹及應用

    js瀏覽器本地存儲store.js介紹及應用

    store.js 是一個兼容所有瀏覽器的 LocalStorage 包裝器,不需要借助 Cookie 或者 Flash。store.js 即可實現本地存儲功能
    2014-05-05
  • Laravel中常見的錯誤與解決方法小結

    Laravel中常見的錯誤與解決方法小結

    大家在用Laravel框架期間可能會遇到了不少問題,現在我將自己遇到的一些問題總結出來,有一些調試起來著實不太容易,本文篩選出幾個,希望這篇文章能讓大家在PHP開發(fā)中少走一些彎路。
    2016-08-08
  • 你可能不知道的CORS跨域資源共享

    你可能不知道的CORS跨域資源共享

    這篇文章主要給大家介紹了關于CORS跨域資源共享的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用CORS具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 頁面下沉抖動效果-網站HTTP連接沒有效果-PC上有效果

    頁面下沉抖動效果-網站HTTP連接沒有效果-PC上有效果

    頁面下沉抖動效果實現代碼,代碼少,功能還可以
    2008-05-05

最新評論