Laravel大文件图片上传失败:超1MB返回400错误求助
解决Laravel大文件上传400错误的方案
针对你遇到的大文件上传返回400的问题,核心是PHP和Laravel的文件上传限制配置没跟上,按以下步骤排查修改:
调整PHP核心配置(php.ini)
找到你的PHP配置文件(不同环境路径不同,比如Ubuntu是/etc/php/8.2/fpm/php.ini,Windows是PHP安装目录下的php.ini),修改以下参数:upload_max_filesize = 10M ; 单个文件最大上传大小,按需调整数值 post_max_size = 12M ; POST请求总大小,必须大于upload_max_filesize max_execution_time = 60 ; 脚本执行超时时间,大文件上传需要更长时间修改后重启Web服务器(Apache/Nginx)和PHP-FPM(如果使用FPM模式)。
给Laravel请求添加文件大小验证
你的当前代码未做文件大小校验,建议在store方法开头加上验证规则,既能明确拦截过大文件,也能返回更清晰的错误信息:public function store($id, Request $request) { // 新增验证规则,max单位为KB,10240对应10MB $validated = $request->validate([ 'image' => 'required|file|max:10240', ]); if(!$request->hasFile('image')) { return response()->json(['upload_file_not_found'], 400); } $file = $request->file('image'); if(!$file->isValid()) { return response()->json(['invalid_file_upload'], 400); } $path = Storage::putFile('logements', $request->file('image')); return response()->json($path); }检查Nginx客户端请求体限制(若使用Nginx)
如果服务器用的是Nginx,需要在站点配置文件或nginx.conf中添加/修改:client_max_body_size 10M;修改后重启Nginx,否则Nginx会先拦截超大小的请求,导致Laravel根本接收不到请求。
确认Laravel存储目录权限
虽然小文件能正常上传,还是要确认storage/app/logements目录权限是否正确,确保Laravel有写入权限:chmod -R 755 storage/ chown -R www-data:www-data storage/ # Linux环境下,www-data为Web服务器用户
内容的提问来源于stack exchange,提问作者Dewei
相关产品推荐
相关产品推荐

