2010-08-13 29 views
1

我正在尋找一種方法將HTML5 Web數據庫的內容保存到本地文件以進行持久化並重新加載到Web應用程序中。我使用Firefox 3.6.8和HTML5功能來使用本地Web數據庫。我可以上傳文件並閱讀它的內容,但無法找到將數據庫內容保存到文件系統的優雅方式。有任何想法嗎?如何將HTML5 Web數據庫的內容下載到客戶端?

我相信有閃光燈寫的東西可以做到這一點。我會考慮這一點,但我寧願選擇直接的HTML 5版本。

回答

0

你不能用純HTML5做這件事,因爲它沒有任何機制來處理本地文件(這意味着無論如何都存在安全風險)。您至少需要一些JavaScript或Flash來在本地存儲數據。

但是你不能使用JavaScript訪問本地文件系統。您只能使用Cookie或瀏覽器的功能。

你也不能使用Flash來做到這一點。兩個系統的工作原理都相同:它們將信息存儲在瀏覽器/ Flash指定的位置。而且,在這兩種情況下,空間都是有限的(這個限制隨着平臺甚至個人設置而變化)。

要做到這一點的唯一方法是將數據發佈到服務器(例如使用隱藏表單),並讓服務器以標題Content-Disposition: attachment作出響應並將文件發送回客戶端。例如:

<form action="doLoopback.php" method="POST" name="theForm"> 
    <input type="hidden" id="data-container" name="data"> 
</form> 
<span id="trigger">→ Click here! ←</span> 
<script> 
var theData = '123, 2334, "Fé℗⇒oo"'; 

function sendData() { 
    document.getElementById('data-container').value = theData; 
    document.theForm.submit(); 
} 

window.onload = function() { 
    var el = document.getElementById('trigger'); 
    el.onclick = sendData; 
}; 
</script> 

,並使用PHP響應文件上寫着:

<?php 
    if (isset($_POST['data'])) { 
     header('Content-Disposition: attachment; filename=foo.csv'); 
     header('Content-Type: application/octet-stream'); 
     echo $_POST['data']; 
    } 
?> 
+0

我正在尋找的是保持客戶機上的一切的一種方式。我不希望任何數據被髮送到服務器。我相信我已經看到了一個可以做到這一點的Flash應用程序。任何想法是什麼? 我也明白爲什麼他們沒有添加保存到磁盤的能力,因爲它存在安全風險,但是如果我可以從服務器上下載文件並將它們保存在本地,爲什麼點擊鏈接時執行完全相同文件保存對話框本地更多的安全風險? – spig 2010-08-15 16:33:54

+0

@spig:你最後一句話是對的,我自己想到了。只是你所描述的不是瀏覽器設計的方式。離線網絡應用程序相當新穎。我不知道Flash,所以我無法幫助你。 – 2010-08-15 16:56:09

+0

也許這將是問題的很好的參考: 如何在本地保存文件閃光燈: http://cookbooks.adobe.com/post_Save_a_file_locally_with_Flash_Player_10-14426.html 如何在本地保存文件在Silverlight: http://www.kirupa.com/blend_silverlight/saving_file_locally_pg1.htm – spig 2010-08-15 23:04:40