cordova SQLite保存BLOB

dxxyhpgq  于 2022-11-15  发布在  SQLite
关注(0)|答案(5)|浏览(170)

我有一个 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字符串是非常巨大的.(它的作品与小图像)
请帮帮我,对不起我的英语。

zhte4eai

zhte4eai1#

您不能将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

qlvxas9a

qlvxas9a2#

您可以使用blob文字和hex函数,在SQL和JavaScript之间的接口上将blob值视为十六进制字符串,这样就可以正常工作。

ggazkfy8

ggazkfy83#

你的图片有多大?我已经建立了一个应用程序,它将图片保存到应用程序数据库中,请参阅此库存服务。我使用了PouchDB和一个客户base64-service。你也可以在official stores中找到该应用程序。

kpbpu008

kpbpu0084#

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

kiayqfof

kiayqfof5#

你不能保存二进制图像到本地sqlite,但一个解决方案存在,如果你使用相机或画廊上传图像:

photoOption(src, val) {
    const options: CameraOptions = {
      quality: 60,
      destinationType: this.camera.DestinationType.FILE_URI,
      encodingType: this.camera.EncodingType.JPEG,
      mediaType: this.camera.MediaType.PICTURE,
      sourceType: src,
      correctOrientation: true
    };

    this.camera.getPicture(options).then((imageData) => {
      let FILE_URI = imageData; // this is FILE_URI (file:///storage/emulated/0/Android/data/com.mycompany.myproject/cache/1022001.jpg) like this
      this.insertImgIntoSqlite(FILE_URI);
    }, (err) => {
      alert(JSON.stringify(err));
    });
  }

您可以将FILE_URI保存在本地sqlite中,当您想上传到服务器时,请转换为BINARY_FILE并上传到服务器

相关问题