首页 > 解决方案 > 在 Django 中处理 .wasm.gz 和 .data 文件的正确方法?

问题描述

我目前正在处理在 192.168.0.168 上本地运行的 django Web 应用程序中的一个问题。我正在使用一个使用 .wasm.gz 文件和 .data 文件的 OCR 库。在他们提到的文档中:“在某些情况下,您需要配置您的网络服务器以提供数据和 wasm.gz 文件。”。我的第一个想法是在 django 中添加以下 mimetypes:

  1. mimetypes.add_type("application/x-gzip", ".wasm.gz", True)
  2. mimetypes.add_type("application/octet-stream", ".data", True)

但是,我仍然看到错误:error wasm-instantie。它以某种方式无法实例化 wasm,因为 django 需要正确地提供 wasm.gz 和 .data 文件。但是这些已添加到静态文件夹中,如果我手动浏览到链接,我可以下载它们。有谁知道我需要做什么才能正确地提供这些服务?

标签: pythondjangowebassembly

解决方案


如果您使用的库使用 加载 WASM 代码WebAssembly.instantiateStreaming,则必须使用application/wasm内容类型来提供 WASM 文件。GZip 是一种内容编码而不是媒体类型。

我假设您使用的是开发服务器,因此如果出现上述问题,那么您应该将上面的第一行代码替换为:

mimetypes.add_type("application/wasm", ".wasm.gz", True)

(请注意,仅在运行 Python 3.8 之前的版本时才需要上述内容。如果您运行的是 Python 3.8 或更高版本,那么这不是您的解决方案。)

澄清一下,使用 GZip 预压缩静态资源是相当普遍的做法,然后通过 HTTP 发送带有Content-Encoding: gzip标头集的资源。这样可以节省每次请求文件时压缩文件的服务器资源。正确设置后,浏览器会接收 GZipped 字节,解压缩它们,并将解压缩的字节解释为适当的 Content-Type。

Django 开发服务器遵循内置mimetypes包,它执行此测试。


推荐阅读