[英]How to upload a big file from a form to Phoenix?
我有一个带有文件字段的 HTML 表单,用于将文件上传到我的 Phoenix 应用程序中的/file
路由。
我使用curl -v -F "file=@MyTestFile" http://localhost:4000/file/
从命令行模仿这种行为,以加快测试速度。
当我使用大文件时(转折点似乎在 7.7MB 左右),我从 Plug 得到以下异常:
18:40:38.897 [error] 进程 <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 中似乎有一个:length
选项关键字,但我如何从 Phoenix 设置它? 选择这个特定值8_000_000
的原因是什么?
您可以在config/config.exs
文件中进行config/config.exs
:
config :phoenix, MyApp.Router,
...
parsers: [parsers: [:urlencoded, :multipart, :json],
accept: ["*/*"],
json_decoder: Poison,
length: 100_000_000],
仅供参考,有关此功能的最新文档(因为此问题和这些答案此时已过时),请参阅官方文档: https : //phoenixframework.readme.io/docs /文件上传
请注意,接受的答案意味着所有请求类型都将增加其最大允许长度。 截至 2022 年 2 月, Plug.Parsers
文档显示您可以仅为endpoint.ex
中的多部分解析器设置此项:
如果你只想增加多部分请求的限制(通常是用于文件上传的请求),你可以这样做:
plug Plug.Parsers,
parsers: [
:url_encoded,
{:multipart, length: 20_000_000}, # Increase to 20MB max upload
:json
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.