AJAX请求在大型查询字符串Elixir Plug

时间:2018-03-12 09:48:20

标签: ajax elixir

我在AJAX请求中发送2个大型查询字符串,基本上是jpeg(s)的Base64编码。当相机不是高分辨率时,AJAX请求不会中止。

起初,我认为它是一个Nginx问题,因为我收到错误request entity too large我解决了它,然后我更改了我的插件

  plug Plug.Parsers,
    parsers: [
      :urlencoded,
      {:multipart, length: 20_000_000},
      :json
      ],
    pass: ["*/*"],
    query_string_length: 1_000_000,
    json_decoder: Poison

定义query_string_length后,现在我没有收到上述任何错误,但ajax请求仍然中止。

Base64编码字符串大小为546,591 bytes或最大

我已经尝试将AJAX请求超时增加到非常大的时间跨度,但它仍然失败。我现在还没有任何线索可以解决问题。

我们如何在Plug中收到长字符串?

关于StackOverflow关于此问题的一些答案,其中人们使用AJAX和PHP,建议更改post_max_size,我们如何在Elixir Plug中做到这一点?

1 个答案:

答案 0 :(得分:2)

当你发送带有JSON数据的AJAX请求时,你应该将json的长度配置放在插件中。

  plug Plug.Parsers,
    parsers: [
      :urlencoded,
      {:multipart, length: 20_000_000},
      {:json, length: 80_000_000},
      ],
    pass: ["*/*"],
    json_decoder: Poison

我想您不会将数据放在帖子的查询字符串中,因此query_string_length - 不需要查询字符串的最大允许大小。

---原始答案---

对于1.4.3周围的插件版本,并且没有query_string_length选项。

当您将数据发布为字符串时,您使用的是Plug.Parsers

  

如果您愿意处理更大的请求,请提供:长度   到Plug.Parsers。

您应该将代码query_string_length: 1_000_000更改为length: 20_000_000