三个思路解决laravel上传文件报错:413 Request Entity Too Large问题


Posted in PHP onNovember 13, 2017

最近一个项目当中,要求上传图片,并且限制图片大小,虽然在laravel当中已经添加了相关的表单验证来阻止文件过大的上传,然而当提交表单时,还没轮到laravel处理,nginx就先报错了。当你仔细看报错页面时,你会发现有nginx版本信息,经过分析,这报错是因为nginx的默认上传文件大小配置client_max_body_size只有2MB, 基于nginx验证比laravel验证要早,想要友好报错而不是直接显示413 Request Entity Too Large,那么就有三个思路去解决。

   思路一:修改nginx配置

   这是最简单的一个做法,着报错原因是nginx不允许上传配置过大的文件,那么件把nginx的上传大小配置调高就好。

    1、打开nginx主配置文件nginx.conf,一般在/usr/local/nginx/conf/nginx.conf这个位置,找到http{}段并修改以下内容:

client_max_body_size 2m;

  当中的2m修改成你需要的允许文件大小。

   2、修改后,测试nginx配置是否正确

/usr/local/nginx/sbin/nginx -t

 3、测试配置正确后,重启nginx使配置生效

/etc/init.d/nginx restart

注意:要是以php运行的话,这个大小client_max_body_size要和php.ini中的如下值的最大值差不多或者稍大,这样就不会因为提交数据大小不一致出现错误。

post_max_size = 2M 
upload_max_filesize = 2M

当中的2m修改成你需要的允许文件大小。把当中的2m修改成你第一步设置的大小。 

   思路二:修改添加友好报错页面

 思路一虽然简单,但是不一定能过项目测试那一关,项目测试就要求不要看到413 Request Entity Too Large这样显示错误,所以我们只好添加友好报错页面咯。

  1、编辑一个简单的htm作为静态友好页面

(注意html文件乱码请用<meta http-equiv="Content-Type" content="text/html; charset=utf-8">)

2、更改nginx.conf在http定义区域加入:

fastcgi_intercept_errors on;

  3、nginx的网站conf配置中的server 定义区域加入:

error_page 413 /413.htm;

(注意此处413与/413.htm之间不要用等号,否则返回状态码为200而不是413,同时尽量不要 http://www.xxx.com/404.html出错则会跳过该页面)

4、测试nginx配置是否正确

/usr/local/nginx/sbin/nginx -t

5、如果上一步成功重启nginx

/etc/init.d/nginx restart

思路三:表单提交之前先用JS判断并且阻止表单提交

  思路二虽然比思路一有进步了一些,但是提醒还是跳转页面了,这样的用户体验并不会好到哪里去,所以最终想到了思路三。上文已经说过,这413报错是来自后端nginx的,nginx的判断虽然比PHP还要早,但是我们可以直接从前端处理呀!想到这里,实现并不难了。可以添加文件上传事件判断,如果文件超过限制的大小,那么就弹出警告框并让提交按钮失效,如果文件没有超过限制大小,就提示大小合适,并且把之前的按钮失效状态取消掉。

   简单的HTML代码:

<form action="" method="post" enctype="multipart/form-data">     
 <div class="form-group"> 
  <label for="picture">文章展示图片(800KB内):</label> 
  <input id="picture" name="picture" type="file"/> 
 </div> 
  <button type="submit" id="submit" class="am-btn am-btn-success"><span class="am-icon-send"></span> 
   发布 
  </button> 
 </p> 
</form>

  JS代码: 

$('#picture').bind('change', function () { 
   if (this.files[0].size / 1024 / 1024 > 0.8){ 
    value = this.files[0].size/1024; 
    alert('该文件大小是 ' + value .toFixed(0) + "KB,已超过大小限制,请修改!"); 
    document.getElementById("submit").disabled=true; 
    document.getElementById("submit").innerHTML='非法图片内容'; 
   }else{ 
    alert('该文件可以提交!'); 
    document.getElementById("submit").disabled=false; 
    document.getElementById("submit").innerHTML='提交'; 
   } 
  });

总结:其实三个思路是按照时间顺序来写的,在实际项目中最终的功能实现也是更新换代才有了最后的结果。不过当有这样类似的经验,下次遇到这样的弯路就省掉,同时会让自己的处理问题的方式更加成熟。

以上所述是小编给大家介绍的三个思路解决laravel上传文件报错:413 Request Entity Too Large问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 PHP
浅析php中如何在有限的内存中读取大文件
Jul 02 PHP
解析php中curl_multi的应用
Jul 17 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
php获取网页请求状态程序示例
Jun 17 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
php之static静态属性与静态方法实例分析
Jul 30 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
phpQuery采集网页实现代码实例
Apr 02 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 #PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 #PHP
PHP 断点续传实例详解
Nov 11 #PHP
PHP+AJAX 投票器功能
Nov 11 #PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 #PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 #PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 #PHP
You might like
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
extjs 为某个事件设置拦截器
2010/01/15 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
什么是View State?
2013/01/27 面试题
应届生服务员求职信
2013/10/31 职场文书
关于安全的演讲稿
2014/05/09 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
土地租赁意向书
2014/07/30 职场文书
重阳节标语大全
2014/10/07 职场文书
大学生就业意向书
2015/05/11 职场文书
中秋晚会致辞
2015/07/31 职场文书
生活委员竞选稿
2015/11/21 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技