将 Uint8array 保存到 sqlite 文件

Posted

技术标签:

【中文标题】将 Uint8array 保存到 sqlite 文件【英文标题】:Saving Uint8array to a sqlite file 【发布时间】: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”的文件,但我从数据库客户端软件收到“无效文件格式”错误。

【问题讨论】:

【参考方案1】:
    类型应该是MIMEapplication/octet-stream当你有二进制数据并且没有其他MIME更合适 调用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 类型完美配合。谢谢!

以上是关于将 Uint8array 保存到 sqlite 文件的主要内容,如果未能解决你的问题,请参考以下文章

将响应正文流式传输到打字稿中的文件:“ReadableStream<Uint8Array>”类型上不存在属性“管道”

使用 emscripten 如何将 C++ uint8_t 数组获取到 JS Blob 或 UInt8Array

如何通过 FMDB 将数据保存和检索到 sqlite

如何将位图从 ImageView 保存到数据库 sqlite?

如何使用 SQLite 和 PHP 将图像保存到数据库?

如何将数据从 listview 单选按钮保存到 SQLite?