2010-08-13 30 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