【问题标题】:How to serve a static JSON file from Phoenix with charset utf-8 for Filestack如何使用用于 Filestack 的字符集 utf-8 从 Phoenix 提供静态 JSON 文件
【发布时间】:2017-02-18 22:37:39
【问题描述】:
我有一个 Phoenix 应用程序,在 javascript 端我使用 Filestack 客户端。 Filestack 从我的服务器请求一个 JSON 文件。我已将文件放在我的资产目录中并已加载,但 Filestack Javascript 客户端因错误而崩溃,因为它无法读取对德语变音符号 (öäü) 所做的 json。我查看了标题,它就像Content-type: application/json 一样提供服务。我想我需要的是Content-type: application/json; charset=utf-8。我也使用 webpack2 顺便说一句。
我该如何做到这一点?
【问题讨论】:
标签:
json
phoenix-framework
【解决方案1】:
Plug.Static 使用mime 包来设置content-type 标头。您可以覆盖json 的值,如mime package's README 中所述。确保您的应用使用的是 mime 版本 1.1.0 或更高版本,因为由于在 1.1.0 中修复了 bug,内置 mime 类型不可覆盖。
将此添加到config/config.exs:
config :mime, :types, %{"application/json; charset=utf-8" => ["json"]}
然后,强制重新编译mime:
mix deps.clean --build mime
然后启动 Phoenix:
mix phoenix.server
在此之后,.json 服务于Plug.Static 的文件的content-type 应该是application/json; charset=utf-8:
$ curl -I localhost:4000/js/foo.json
HTTP/1.1 200 OK
server: Cowboy
date: Sat, 18 Feb 2017 14:36:51 GMT
content-length: 3
cache-control: public
etag: 8EA91E
content-type: application/json; charset=utf-8