首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >413请求实体太大

413请求实体太大
EN

Stack Overflow用户
提问于 2018-03-12 07:31:11
回答 1查看 2.2K关注 0票数 3

我正在发送一个base64表单中的图像,然后用它创建一个图像并发送给AWS。

一开始我以为是Nginx的问题。因此,我将client_max_body_size更改为最大值,但它没有工作。我仍然得到413 Request Entity Too Large错误。

只有当我发送高分辨率图像的Base64字符串时,才会发生这种情况。因为我们使用Plug对请求进行身份验证。我刚刚发现了塞式分析器行为的事。我创建的插头是:

代码语言:javascript
复制
defmodule EvercamMediaWeb.AuthenticationPlug do
  import Plug.Conn

  def init(_opts) do
  end

  def call(conn, _) do
    api_id = extract_credential(conn, %{header: "x-api-id", query: "api_id"})
    api_key = extract_credential(conn, %{header: "x-api-key", query: "api_key"})
    token =
      conn
      |> extract_credential(%{header: "authorization", query: "authorization"})
      |> String.downcase
      |> String.replace_leading("bearer ", "")

    case EvercamMediaWeb.Auth.validate(api_id, api_key, token) do
      :valid ->
        conn
      {:valid, user} ->
        conn
        |> assign(:current_user, user)
      :invalid ->
        conn
        |> put_resp_content_type("application/json")
        |> resp(401, Poison.encode!(%{message: "Invalid API keys"}))
        |> send_resp
        |> halt
    end
  end

  defp extract_credential(conn, %{header: header_name, query: query_string_name}) do
    extract_credential_from_query_string(conn, query_string_name) || extract_credential_from_header(conn, header_name)
  end

  defp extract_credential_from_query_string(conn, query_string_name) do
    Map.get(conn.params, query_string_name)
  end

  defp extract_credential_from_header(conn, header_name) do
    conn
    |> Plug.Conn.get_req_header(header_name)
    |> List.first
    |> to_string
  end
end

如何修改插件的行为以使用:query_string_length &

代码语言:javascript
复制
 {:multipart, length: 20_000_000} # Increase to 20MB max upload

在上面的插件中,它可以支持字符串的最大大小,也可以上传到最大值。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-12 07:46:58

在您的MyAppWeb.Endpoint文件中,应该有类似于配置解析器的内容

代码语言:javascript
复制
plug Plug.Parsers,
  parsers: [:urlencoded, :multipart, :json],
  pass: ["*/*"],
  json_decoder: Poison

parsers更改为:

代码语言:javascript
复制
  parsers: [:urlencoded, 
           {:multipart, length: 20_000_000},
            :json]
  query_string_length: 1_000_000,
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49230116

复制
相关文章

相似问题

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