首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Blazor WASM中读取/导入Sqlite数据库?

如何在Blazor WASM中读取/导入Sqlite数据库?
EN

Stack Overflow用户
提问于 2022-06-03 18:47:07
回答 1查看 197关注 0票数 0

这是否可行呢?我所能找到的就是如何让它在应用程序中运行,没有任何东西能够接近文件的导入,而文件将是一个byte[]文件,并使它能够实例化客户机并在其上读取/写入(在内存中)。

EN

回答 1

Stack Overflow用户

发布于 2022-11-25 17:31:48

这是可能的,但不太可行,因为它会导致一些奇怪的行为/错误,因为你现在添加了更多的数据/表,根据我的卑微的实验。

首先,通过HTTP调用将文件作为流读取,并将其转换为如下所示的base64字符串:

代码语言:javascript
运行
复制
var stream = await Http.GetStreamAsync("sqlite.db"); // file in the wwwroot
var buffer = new byte[stream.Length];
using var ms = new MemoryStream(buffer, 0, buffer.Length);
await stream.CopyToAsync(ms);

string base64 = Convert.ToBase64String(ms.ToArray());
await JS!.InvokeVoidAsync("fn.writeToCache", base64);

然后,这是JavaScript函数实现:

代码语言:javascript
运行
复制
window.fn = {
  writeToCache: async function (buffer) {
    const cachePath = `/data/cache/sqlite.db`;
    const cache = await caches.open('your-cache-name');
    const resp = await cache.match(cachePath);

    if (resp && resp.ok) {
      return false;
    } 

    const fileUrl = "data:application/octet-stream;base64," + buffer;
    const res = await fetch(fileUrl);
    const blob = await res.blob();

    const headers = new Headers({
      'content-length': blob.size
    });

    const response = new Response(blob, {
      headers
    });

    await cache.put(cachePath, response);

    console.log("Data cached.");

    location.Reload(); // Necessary step to be able to see the cache
  }
}

只是一些额外的笔记:

代码语言:javascript
运行
复制
/** Available only in secure contexts. */
declare var caches: CacheStorage; // <-- HTTPS only
declare var crossOriginIsolated: boolean;
declare var crypto: Crypto;
declare var indexedDB: IDBFactory;
// ...
  • 安全上下文:此功能仅在安全上下文(HTTPS)、部分或所有支持浏览器中可用。
  • headers :缓存API不支持headers。
  • 密钥匹配算法密钥匹配算法依赖于变标头中的值。因此,匹配一个新键需要查看Cache对象中条目的键和值。由于这个原因,请确保按名称对缓存进行版本化,并且只使用它们可以安全操作的脚本版本中的缓存。下面是Mozilla关于如何通过vanilla JavaScript:删除旧缓存摆脱旧缓存的示例
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72493961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档