11

我有一个带有文件字段的 HTML 表单,用于将文件上传到/file我的 Phoenix 应用程序中的路由。

我从命令行模仿这种行为以curl -v -F "file=@MyTestFile" http://localhost:4000/file/进行更快的测试。

当我使用一个大文件(转折点似乎在 7.7MB 左右)时,我从 Plug 中得到以下异常:

18:40:38.897 [错误] 进程 <0.420.0> 出错,退出值:{[{reason,#{' exception '=>true,' struct '=>'Elixir.Plug.Parsers.RequestTooLargeError',message =>nil}},{mfa,{'Elixir.Plug.Adapters.Cowboy.Handler',init,3}},{stacktrace,[{'Elixir.Plug.Parsers',reduce,6,[{file,”库/插件...

是否有允许上传更大文件的解决方法?

Plug 中似乎有一个:lengthoption 关键字,但我如何从 Phoenix 设置它?选择这个特定值的原因是8_000_000什么?

4

3 回答 3

6

您可以在config/config.exs文件中进行配置:

config :phoenix, MyApp.Router,
  ...
  parsers: [parsers: [:urlencoded, :multipart, :json],
            accept: ["*/*"],
            json_decoder: Poison,
            length: 100_000_000],
于 2014-11-25T19:07:18.827 回答
1

仅供参考,有关此功能的最新文档(因为此时此问题和这些答案已经过时),请参阅官方文档:https ://phoenixframework.readme.io/docs /文件上传

于 2017-06-16T17:00:46.447 回答
1

请注意,接受的答案意味着所有请求类型都将增加其最大允许长度。截至 2022 年 2 月,Plug.Parsers文档显示您可以仅为endpoint.exas 中的多部分解析器设置此项:

如果您只想增加多部分请求的限制(通常是用于文件上传的请求),您可以执行以下操作:

plug Plug.Parsers,
     parsers: [
       :url_encoded,
       {:multipart, length: 20_000_000}, # Increase to 20MB max upload
       :json
     ]
于 2022-02-16T09:46:23.043 回答