【问题标题】:Saving Uint8array to a sqlite file将 Uint8array 保存到 sqlite 文件
【发布时间】:2014-07-25 23:41:28
【问题描述】:

我使用sql.js 作为 SQLITE3 数据库的管理界面。

基本上 sql.js 提供了一个导出方法,该方法返回一个 Uint8Array 供开发人员进一步处理。

目标:让用户按下按钮并弹出“另存为”对话框以保存一个有效的 sqlite3 数据库文件。

我的尝试:我在研究此问题的网络的各个部分发现了这个保存代码块。

        /* Uint8Array */
        var binArray = db.export();

        var saveData = (function () {
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.style = "display: none";
            return function (data, fileName) {

                /* Is JSON.stringify necessary? */
                var json = JSON.stringify(data),

                    /* Is type: "octet/stream" correct? */
                    blob = new Blob([json], {type: "octet/stream"}),
                    url = window.URL.createObjectURL(blob);
                a.href = url;
                a.download = fileName;
                a.click();
                window.URL.revokeObjectURL(url);
            };
        }());

        saveData(binArray, "sqldb.sql");

它正确保存了一个名为“sqldb.sql”的文件,但我从数据库客户端软件收到“无效文件格式”错误。

【问题讨论】:

    标签: javascript save


    【解决方案1】:
    1. 类型应该是MIMEapplication/octet-stream当你有二进制数据并且没有其他MIME更合适
    2. 调用JSON.stringify 毫无意义,当您已经拥有要保存的二进制数据时,您最终会得到一个看起来像'{"0":254, "1":128, ...}'字符串

    结合这两点,返回的函数应该更像这样

        // ...
            return function (data, fileName) {
                var blob = new Blob([data], {type: "application/octet-stream"}),
                    url = window.URL.createObjectURL(blob);
                a.href = url;
                a.download = fileName;
                a.click();
                window.URL.revokeObjectURL(url);
            };
    

    您可能还需要考虑 Uint8Array 本身是否真的是一个完整的 .sql 文件,即,如果您调用它不是在浏览器/ajax 中获取它,但是这样它是直接写入磁盘的(例如使用 curl 或直接链接)该文件是否是有效的 sql 文件?

    【讨论】:

    • 与 MIME 类型完美配合。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 2023-03-28
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多