如何将HTML5 Web数据库的内容下载到客户端?

时间:2010-08-13 21:54:17

标签: html5 storage filesystems

我正在寻找一种方法将HTML5 Web数据库的内容保存到本地文件以实现持久性并加载回Web应用程序。我正在使用具有HTML5功能的Firefox 3.6.8来使用本地Web数据库。我可以上传文件并读取它的内容,但无法找到将数据库内容保存到文件系统的优雅方法。有什么想法吗?

我相信闪存中写的东西可以做到这一点。我会考虑这个,但我更喜欢直接的HTML 5版本。

1 个答案:

答案 0 :(得分:0)

你不能用普通的HTML 5做到这一点,因为它没有任何处理本地文件的机制(这无论如何都意味着存在安全风险)。您至少需要一些JavaScript或Flash才能在本地存储数据。

但是您无法使用JavaScript访问本地文件系统。您只能使用Cookie或浏览器的localStorage功能。

你也不能用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'];
    }
?>