1. 最近在项目中遇到上传文件,对上传文件的大小需要进行限制,这里学习和整理了一下一些常规的文件大小限制的方法。
  1. 一般分为两种方式,一种是服务器端判断文件大小进行限制,这种方法的存在明显的缺陷,当用户过多后,数据上传到服务器之后,在对其进行监测,大大增加了宽带和服务器的压力。

  2. 另一种是放在前端进行大小监测, 这种方式提前进行监测,可以有效减小服务器的压力。

  3. 当上传的文件过大之后,可以使用百度开发的文件上传插件 WebUploader,或者另一个文件上传插件Plupload

下面分别介绍两种方式:

###服务器端限制###

  1. 在nginx上进行配置参数clinet_max_body_size=20m;默认为1m,

  2. 在apache服务器下添加 LimitRequestBody=20m默认没有限制。

  3. php.ini中限制分别设置以下参数:

    file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开
    upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
    upload_max_filesize = 8m ;望文生意,即允许上传文件大小的最大值。默认为2M 
    post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M 
    一般地,设置好上述四个参数后,上传<=8M的文件是不成问题,在网络正常的情况下。

但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得关心关心下面的参数 
max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒 
max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒 
memory_limit = 8m ;每个PHP页面所吃掉的最大内存,默认8M

  1. 在ASP中配置Web.config文件的httpRuntime

  1. httpRuntime
  2. <httpRuntime executionTimeout="90" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"
  3. minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="false"/>

httpRuntime是配置asp.net http运行时设置,以确定如何处理对asp.net应用程序的请求。

  1. executionTimeout:表示允许执行请求的最大时间限制,单位为秒
  2. maxRequestLength:指示 ASP.NET 支持的最大文件上载大小。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4 MB)。
  3. useFullyQualifiedRedirectUrl:表示指示客户端重定向是否是完全限定的(采用 "http://server/path" 格式,这是某些移动控件所必需的),或者指示是否代之以将相对重定向发送到客户端。如果为 True,则所有不是完全限定的重定向都将自动转换为完全限定的格式。false 是默认选项。
  4. minFreeThreads:表示指定允许执行新请求的自由线程的最小数目。ASP.NET 为要求附加线程来完成其处理的请求而使指定数目的线程保持自由状态。默认值为 8
  5. minLocalRequestFreeThreads:表示ASP.NET 保持的允许执行新本地请求的自由线程的最小数目。该线程数目是为从本地主机传入的请求而保留的,以防某些请求在其处理期间发出对本地主机的子请求。这避免了可能的因递归重新进入 Web 服务器而导致的死锁。
  6. appRequestQueueLimit:表示ASP.NET 将为应用程序排队的请求的最大数目。当没有足够的自由线程来处理请求时,将对请求进行排队。当队列超出了该设置中指定的限制时,将通过“503 - 服务器太忙”错误信息拒绝传入的请求。
  7. enableVersionHeader:表示指定 ASP.NET 是否应输出版本标头。Microsoft Visual Studio 2005 使用该属性来确定当前使用的 ASP.NET 版本。对于生产环境,该属性不是必需的,可以禁用。

前端限制

  1. 兼容IE浏览器,使用了ActiveX,或者也可以使用flash来兼容

  1. <input type="file" style="width:500px;" onchange="fileChange(this);">
  2. // 判断是否为IE浏览器: /msie/i.test(navigator.userAgent) 为一个简单正则
  3. var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
  4. function fileChange(target){
  5. var fileSize = 0;
  6. if (isIE && !target.files) { // IE浏览器
  7. var filePath = target.value; // 获得上传文件的绝对路径
  8. /**
  9. * ActiveXObject 对象为IE和Opera所兼容的JS对象
  10. * 用法:
  11. * var newObj = new ActiveXObject( servername.typename[, location])
  12. * 其中newObj是必选项。返回 ActiveXObject对象 的变量名。
  13. * servername是必选项。提供该对象的应用程序的名称。
  14. * typename是必选项。要创建的对象的类型或类。
  15. * location是可选项。创建该对象的网络服务器的名称。
  16. *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  17. * Scripting.FileSystemObject 为 IIS 内置组件,用于操作磁盘、文件夹或文本文件,
  18. * 其中返回的 newObj 方法和属性非常的多
  19. * 如:var file = newObj.CreateTextFile("C:\test.txt", true) 第二个参表示目标文件存在时是否覆盖
  20. * file.Write("写入内容"); file.Close();
  21. */
  22. var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
  23. // GetFile(path) 方法从磁盘获取一个文件并返回。
  24. var file = fileSystem.GetFile(filePath);
  25. fileSize = file.Size; // 文件大小,单位:b
  26. }
  27. else { // 非IE浏览器
  28. fileSize = target.files[0].size;
  29. }
  30. var size = fileSize / 1024 / 1024;
  31. if (size > 1) {
  32. alert("附件不能大于1M");
  33. }
  34. }

  1. 在HTML5中不仅支持获取上传文件大小,还支持多文件同时上传:

  1. <input type="file" multiple="multiple" onchange="checkinfo(this)">
  2. <script>
  3. function checkinfo(obj){
  4. var len = obj.files.length;
  5. var text="";
  6. for (var i =0 ; i < len ; i++){
  7. text += "文件:"+obj.files[i].name+" ,大小:"+obj.files[i].size+"字节\n";
  8. }
  9. console.log(text);
  10. }
  11. </script>

在file类型的input中增加multiple属性,即可上传多个文件,而不必通过增加input框的个数来增加上传文件数量的限制。而对于file类型的对象,HTML5增加了一个FileList接口,让访问<input type="file">元素选中的文件列表成为可能,它还可以应用于用drag和drop API获取拖拽到web页面的文件列表。它有item, length等属性。更加详细的介绍,File API

利用HTML5,不仅可以获取文件大小,还可以进行本地图片预览:

  1. <input type="file" multiple="multiple" onchange="checkinfo(this)">
  2. <div id="win"></div>
  3. <script>
  4. function checkinfo(obj){
  5. var len = obj.files.length;
  6. for (var i =0 ; i < len ; i++){
  7. showimg(obj.files[i]);
  8. }
  9. }
  10. function showimg(img){
  11. var a = new FileReader();
  12. a.readAsDataURL(img);
  13. a.onload=function(){
  14. var img = new Image();
  15. img.src=a.result;
  16. document.getElementById('win').appendChild(img);
  17. }
  18. }
  19. </script>

这里用到FlieReader这个文件API,它可以让web应用异步的加载本地的文件或者内容,它用来操作File或者Bob对象,可以查看FileReader API

web文件上传大小限制的更多相关文章

  1. IIS 之 通过 Web.config 修改文件上传大小限制设置方法

    在IIS 6.0中,不设置默认大小为4M,设置文件上传大小的方法,maxRequestLength(KB),executionTimeout(毫秒),配置如下节点: <system.web> ...

  2. [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制

    原文出处: 原文作者:云中岳 原文链接:http://www.cnblogs.com/netlover/archive/2011/07/08/Win7_IIS_Upload.html IS 7 默认文 ...

  3. IIS 7 中设置文件上传大小的方法

    在IIS 6.0中设置文件上传大小的方法,就是配置如下节点: <system.web> <httpRuntime maxRequestLength="1918200&quo ...

  4. Java Web文件上传

    参考资料:http://www.cnblogs.com/xdp-gacl/p/4200090.html 一.问题描述 Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个 ...

  5. IIS限制ASP.Net 文件上传大小解决方案,修改IIS7/7.5配置

    当在web.config中设置了 httpruntime 后还是无法成功上传大文件,则要修改IIS的系统config IIS 7 默认文件上传大小是30M 要突破这个限制: 修改IIS的applica ...

  6. ASP.NET中的文件上传大小限制的问题

    一.文件大小限制的问题 首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文 ...

  7. Java Web文件上传原理分析(不借助开源fileupload上传jar包)

    Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web   最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...

  8. zt对于C#中的FileUpload解决文件上传大小限制的问题设置

    对于C#中的FileUpload解决文件上传大小限制的问题设置 您可能没意识到,但对于可以使用该技术上载的文件的大小存在限制.默认情况下,使用 FileUpload 控件上载到服务器的文件最大为 4M ...

  9. springMVC文件上传大小超过限制的问题

    [转自]https://my.oschina.net/ironwill/blog/646762 springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便. 我们通过下面的配置来 ...

随机推荐

  1. 修改输入框placeholder的默认样式

    一般网页中都用到input的placeholder属性,想让这个默认样式和网页保持一致,就需要重新设定样式,百度百度: :-moz-placeholder { / color: #000; opaci ...

  2. Genymotion的安装与设置

    Genymotion是一款非常好用的虚拟机,利用它可以在window.Liunx或MAC系统上实现Android的模似器.对于开发人员来说,有了Android模似器,就可以在电脑上实时调试安卓app, ...

  3. iOS 字符串处理笔记

    iOS字符串处理笔记,包括如何使用正则表达式解析,NSScanner扫描,设置和使用CoreParse解析器来解析处理自定义符号等内容 搜索 在一个字符串中搜索子字符串 最灵活的方法 - (NSRan ...

  4. 关于ubuntu终端全屏的时候不能显示底部

    最近在win7的电脑上装了ubuntu,也就是双系统.打算之后工作就直接进入ubuntu,减少之前win7和虚拟机之间的切换.进入ubuntu后,发现一个奇怪的问题是,在终端全屏的时候,底部总是有几行 ...

  5. C#入门(3)

    C#入门(3) Delegates, Events, Lambda Expressions 最早的windows是使用c风格的函数指针来进行callback的,但是这样仅仅传递了一个内存中的地址,无法 ...

  6. CNN眼中的世界:利用Keras解释CNN的滤波器

    转载自:https://keras-cn.readthedocs.io/en/latest/legacy/blog/cnn_see_world/ 文章信息 本文地址:http://blog.keras ...

  7. Asp.Net Core 入门(七)—— 安装Bootstrap

    我们使用 libman包管理器来安装,libman是微软推出的最新的包管理器,它是一个轻量级的客户端管理工具,可以从CDN下载客户端库和框架,它要求VS Studio必须在2017版本15.8或更高版 ...

  8. 函数的参数是函数,函数中Ajax返回的回调函数中的函数运行

    调用函数 checkAjax('addrinfo',formdata,vzxcv); 函数checkAjax function checkAjax(url,formdata,call_back){ / ...

  9. Ukulele 常用和弦

  10. Xcode的Git管理

    在Xcode中创建工程的时候,我们很容易的可以将新创建的工程添加到Git中,如图: 但是如果是本地已经有的工程,那该如何添加到Git中呢? 首先终端进入到该工程的目录. 然后: git init gi ...