我正在发送一个base64表单中的图像,然后用它创建一个图像并发送给AWS。
一开始我以为是Nginx的问题。因此,我将client_max_body_size更改为最大值,但它没有工作。我仍然得到413 Request Entity Too Large错误。
只有当我发送高分辨率图像的Base64字符串时,才会发生这种情况。因为我们使用Plug对请求进行身份验证。我刚刚发现了塞式分析器行为的事。我创建的插头是:
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 &
{:multipart, length: 20_000_000} # Increase to 20MB max upload在上面的插件中,它可以支持字符串的最大大小,也可以上传到最大值。
提前谢谢。
发布于 2018-03-12 07:46:58
在您的MyAppWeb.Endpoint文件中,应该有类似于配置解析器的内容
plug Plug.Parsers,
parsers: [:urlencoded, :multipart, :json],
pass: ["*/*"],
json_decoder: Poison将parsers更改为:
parsers: [:urlencoded,
{:multipart, length: 20_000_000},
:json]
query_string_length: 1_000_000,https://stackoverflow.com/questions/49230116
复制相似问题