2014-08-28 82 views
2

保存到本地文件我有一個棘手的問題給你,這我現在struggeling了一段時間。從斑點

我正在尋找一個解決方案,在那裏我可以將文件保存到用戶的計算機,沒有本地存儲,因爲本地存儲5MB有限制。我想「保存到文件」 - 對話,但我想保存數據只適用於JavaScript的,我想,以防止發送數據到服務器,然後再發送。

用例是,即時處理的服務正在保存用戶數據的壓縮和加密塊,因此服務器不知道這些塊中的內容,並通過將數據發送回服務器,這會導致4倍流量,並且服務器正在接收未加密的數據,這將導致整個加密無效。

我發現了一個JavaScript函數數據到用戶計算機保存「保存到文件」 - 對話,但在這個工作已經停產,心不是完全支持。這是這樣的:http://www.w3.org/TR/file-writer-api/

因此,因爲我沒有window.saveAs,有什麼辦法保存Blob對象的數據而不發送一切到服務器?

將是巨大的,如果我能得到一個提示,該怎麼尋找。

我知道這個工程,因爲MEGA是這樣做的,但我想我自己的解決方案:)

+0

類似的問題 - http://stackoverflow.com/questions/13405129/javascript-create-and-save -file這裏 - http://stackoverflow.com/questions/18690450/saving-a-file-with-javascript – 2014-08-28 11:59:20

回答

7

你最好的選擇是使用一個blob URL(這是一個特殊的URL指向的對象瀏覽器的內存):

var myBlob = ...; 
var blobUrl = URL.createObjectURL(myBlob); 

現在你可以選擇簡單地重定向到該網址(window.location.replace(blobUrl)),或創建一個鏈接。第二個解決方案允許您指定一個默認的文件名:

var link = document.createElement("a"); // Or maybe get it from the current document 
link.href = blobUrl; 
link.download = "aDefaultFileName.txt"; 
link.innerHTML = "Click here to download the file"; 
document.body.appendChild(link); // Or append it whereever you want 
0

從文件選擇或輸入類型=文件文件選擇,文件名保存到本地存儲:

HTML:

<audio id="player1">Your browser does not support the audio element</audio> 

的JavaScript:

function picksinglefile() { 
    var fop = new Windows.Storage.Pickers.FileOpenPicker(); 
    fop.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.musicLibrary; 
    fop.fileTypeFilter.replaceAll([".mp3", ".wav"]); 
    fop.pickSingleFileAsync().then(function (file) { 
     if (file) { 
      // save the file name to local storage 
      localStorage.setItem("alarmname$", file.name.toString()); 
     } else { 
      alert("Operation Cancelled"); 
     } 
    }); 
} 

然後後面的代碼,當你要玩你的Selec文件請使用以下命令,該命令僅使用音樂庫中的名稱來獲取文件。 (在UWP包清單,將您的「Capabilites」包括「音樂庫」。)在這裏發佈

 var l = Windows.Storage.KnownFolders.musicLibrary; 
     var f = localStorage.getItem("alarmname$").toString(); // retrieve file by name 
     l.getFileAsync(f).then(function (file) { 
      // storagefile file is available, create URL from it 
      var s = window.URL.createObjectURL(file); 
      var x = document.getElementById("player1"); 
      x.setAttribute("src", s); 
      x.play(); 
     });