如果上传文件过大怎么处理
如果上传文件过大怎么办
原本的流程 通过iframe实现“无刷新”提交表单,处理完之后返回一段JS来调用页面上的某个方法来实现提交的状态和后续的操作。
这个表单里有个上传按钮,这时候上传的文件(只让传图片),如果上传文件过大(我在配置文件中设置最大为2M),那么页面就进入down状态了,那么该如何捕捉并给出友好的提示呢!
------解决思路----------------------
首先要在配置文件中设置大一点,通过自带的file上传控件有个弊端,必须上传完成后才能获取文件大小。
如果你用ajax,可以在客户端先取下文件大小异步请求发到后台判断,小于2M返回1,第2步再执行异步提交上传。
建议找下相关的插件,人家专业搞这个的,肯定比自己写的完美 。
------解决思路----------------------
JS无法判断,不是还有好多控件能判断吗
该加就加
不要怕麻烦
------解决思路----------------------
服务端也是靠不住的。asp.net好像默认支持最多4M,超过4M,IIS直接禁止掉,不会进到你的程序。
目前最好的办法估计只能用flash了
------解决思路----------------------
大胖说的没错,系统默认设置是4M,9楼回答的也没错,不过不能用他的方法判断,因为你读取到它的长度后基本也就实现了上传,如果你是一个几十兆,甚至几百兆的文件,读取它长度的时间估计就得几分钟左右,最好的办法就是使用falsh控件,这是目前开源免费最好的之一,我是用过,200~300兆以内+进度条实现效果非常理想,而且实现可以设置上传文件大小,超过大小不做任何操作,ie兼容性较好,但是其他有些浏览器兼容性稍微差些。
或者又有个好的方法就是使用内存映射判断大小,这比起9楼读取length快的太多。
------解决思路----------------------
说多了无用上段代码吧
//引用一下两个命名空间
//using System.IO.MemoryMappedFiles;
//using System.IO;
string fliepath = "E:\\softwares\\adobe_photoshop_cs6_33lc.7z";//路径路径
FileInfo fi = new FileInfo(fliepath);
long _fileSize = fi.Length;
string _fileName = fi.Name;
MemoryMappedFile _memoryMappedFile = MemoryMappedFile.CreateFromFile(fliepath, FileMode.OpenOrCreate, _fileName, _fileSize);
using (MemoryMappedViewAccessor mmfReader = _memoryMappedFile.CreateViewAccessor())
{
byte[] buffer = new byte[mmfReader.Capacity];
int 文件大小M = buffer.Length / 1024 / 1024;//因为这里是字节的所以除以1021*1024 得到的是文件的兆
}
------解决思路----------------------
如果你是图片,这都有相应的控件,控件本身就有方法控制大小给出提示,如果你是随便上传什么文件,建议有FTP的方式上传,人家要上传大文件,你总不能让人家不传吧
原本的流程 通过iframe实现“无刷新”提交表单,处理完之后返回一段JS来调用页面上的某个方法来实现提交的状态和后续的操作。
这个表单里有个上传按钮,这时候上传的文件(只让传图片),如果上传文件过大(我在配置文件中设置最大为2M),那么页面就进入down状态了,那么该如何捕捉并给出友好的提示呢!
------解决思路----------------------
if (context.Request.Files.Count > 0)
{
//int length = context.Request.Files[0].ContentLength;
string name = context.Request["name"];
int length = int.Parse(context.Request.Headers["Content-Length"]); //使用请求报文头判断必须前面有个Request接收才行。
if (length > 1024 * 1024 * 2)
{
context.Response.Write("上传失败!文件不能超过2M!您要上传的文件大小为" + length);
context.Response.End();
}
for (int i = 0; i < context.Request.Files.Count; i++)
{
HttpPostedFile file = context.Request.Files[i];
{
首先要在配置文件中设置大一点,通过自带的file上传控件有个弊端,必须上传完成后才能获取文件大小。
如果你用ajax,可以在客户端先取下文件大小异步请求发到后台判断,小于2M返回1,第2步再执行异步提交上传。
建议找下相关的插件,人家专业搞这个的,肯定比自己写的完美 。
------解决思路----------------------
JS无法判断,不是还有好多控件能判断吗
该加就加
不要怕麻烦
------解决思路----------------------
服务端也是靠不住的。asp.net好像默认支持最多4M,超过4M,IIS直接禁止掉,不会进到你的程序。
目前最好的办法估计只能用flash了
------解决思路----------------------
大胖说的没错,系统默认设置是4M,9楼回答的也没错,不过不能用他的方法判断,因为你读取到它的长度后基本也就实现了上传,如果你是一个几十兆,甚至几百兆的文件,读取它长度的时间估计就得几分钟左右,最好的办法就是使用falsh控件,这是目前开源免费最好的之一,我是用过,200~300兆以内+进度条实现效果非常理想,而且实现可以设置上传文件大小,超过大小不做任何操作,ie兼容性较好,但是其他有些浏览器兼容性稍微差些。
或者又有个好的方法就是使用内存映射判断大小,这比起9楼读取length快的太多。
------解决思路----------------------
说多了无用上段代码吧
//引用一下两个命名空间
//using System.IO.MemoryMappedFiles;
//using System.IO;
string fliepath = "E:\\softwares\\adobe_photoshop_cs6_33lc.7z";//路径路径
FileInfo fi = new FileInfo(fliepath);
long _fileSize = fi.Length;
string _fileName = fi.Name;
MemoryMappedFile _memoryMappedFile = MemoryMappedFile.CreateFromFile(fliepath, FileMode.OpenOrCreate, _fileName, _fileSize);
using (MemoryMappedViewAccessor mmfReader = _memoryMappedFile.CreateViewAccessor())
{
byte[] buffer = new byte[mmfReader.Capacity];
int 文件大小M = buffer.Length / 1024 / 1024;//因为这里是字节的所以除以1021*1024 得到的是文件的兆
}
------解决思路----------------------
如果你是图片,这都有相应的控件,控件本身就有方法控制大小给出提示,如果你是随便上传什么文件,建议有FTP的方式上传,人家要上传大文件,你总不能让人家不传吧