2014-04-09 40 views
1

我被要求用JS做一些有點不自然的事情。msSaveBlob任意路徑/它保存在哪裏?

基本上,我需要以允許用戶在本地文件系統中修改它們的方式持久保存文件。

我看到HTML5指定了一個FileWriter API,它似乎部分適用於此。不幸的是,用戶有IE - http://caniuse.com/filesystem - 所以最接近的東西似乎是msSaveBlob。

msSaveBlob是否支持任意文件路徑?理想情況下,我想將這些文件保存在用戶的「文檔」文件夾中。如果不是,這個沙盒文件系統是如何工作的?它在哪裏?它是否保留了原始文件特徵(或者BLOB暗示某種類型的塊存儲)?

注 - 我知道有一個「另存爲」選項與常規鏈接,但我需要知道用戶最終保存文件的位置。

或者,你知道一個更好的方式來保存哪個讓我使用任意路徑嗎?只要它帶有JS包裝器,我並不反對Flash或Silverlight解決方案。

回答

1

FileSystem API目前僅支持Google Chrome和Opera。此API可用於創建,讀取,寫入和刪除文件和目錄,但僅限於文件系統的隔離部分。我給出了一個詳細的例子here(請參閱答案的第二部分)。

關於navigator.msSaveBlob,here是MSDN上的一個例子。此功能通過「保存」和「另存爲」按鈕顯示通知欄。通過點擊後者,用戶可以選擇任意位置來保存文件。

如果你使用navigator.msSaveOrOpenBlob那麼用戶也會得到一個「打開」按鈕。如果用戶點擊這個文件,那麼文件將被打開。在上面提到的MSDN示例中,將使用JavaScript字符串創建文本文件,該文件將在記事本中打開。

將服務器上的文件保存到客戶端機器上任意位置的常用方法是create a link。用戶可以點擊鏈接,或從彈出菜單中選擇「保存鏈接爲...」。如果您想保存使用JavaScript創建的Blob,那麼您可以嘗試使用<a>標記的download屬性,我將示例here。這項技術適用於IE10 +。

+0

「此功能顯示通知欄上的」保存「和」另存爲「按鈕,通過點擊後者,用戶可以選擇任意位置來保存文件。」 - 我可以在navigator.msSaveBlob中指定一個回調來獲取用戶選擇的路徑嗎?如果我可以知道用戶最終保存文件的位置,這一切看起來都很完美。我知道如何創建一個鏈接,但它並不告訴我文件被下載的地方。 –

+0

我不認爲你可以。沒有回調參數並且「只要顯示通知欄就會返回true」(MSDN),這意味着此功能不會在通知欄顯示後跟蹤事件。 – kol

+0

好的謝謝。對我來說,這比正常的鏈接更有用。 –