Cordova SQLite 保存 BLOB

Cordova SQLite save BLOB

我的 Cordova SQLite 插件有问题。

如何将 BLOB 图像保存到 SQLite?

我在 JS 中有 BLOB 对象:

Blob:{
size: 96874
type: "image/jpeg"
__proto__: Blob
length: 1}

我正在努力保存它

INSERT INTO images (img) VALUES (?);

当我尝试获取此图像时:

SELECT img FROM images

我得到这个字符串:

img: "{"type":"image\/jpeg","size":96874}"

如何再次将其转换为 BLOB?

我也尝试用 base64 保存图像,但我无法将大图像保存到 SQLite,因为 base64 字符串非常大。 (适用于小图片)

请帮助我,对不起我的英语。

您可以使用 blob literals and the hex 函数在 SQL 和 JavaScript 之间的接口处将 blob 值视为十六进制字符串,效果很好。

你的图片有多大?我构建了一个将图像保存到应用程序数据库的应用程序,请参阅此 inventory-service. I've using PouchDB and a customer base64-service。 您还可以在 official stores.

中找到该应用程序

您无法将 JavaScript Blob 对象保存到 SQLite 插件。它不支持 Blob 格式。是的,我知道它有一个 BLOB 类型,但令人困惑的是它不是一回事。 :)

WebSQL/SQLite 插件支持二进制字符串作为 Blob 的替代。但是,您可能会 运行 遇到问题,因为 iOS 和 Android (some details are here) 的实现中存在许多错误。

在 PouchDB 中,我们解决了这些问题,因此附件 API 为您抽象了所有内容。按照 PouchDB attachment guide ,它将为您转换 Blob 并将它们存储在数据库中。要创建与 SQLite 插件对话的 PouchDB,您需要执行以下操作:

/* prefer websql, which will actually use the SQLite Plugin if available */
var db = new PouchDB('mydbname', {adapter: 'websql'});
if (!db.adapter) {
  /* fall back to IndexedDB for FirefoxOS, Windows Phone, etc. */
  db = new PouchDB('mydbname');
}

如果您想在 Blob 和二进制字符串或各种其他格式之间进行转换,请查看 blob-util

我的建议是将您的图片简单地存储为平面文件,当然具有唯一的文件名,并将 references 存储在您的 sqlite 数据库中。