将 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】:-
类型应该是MIME
application/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