首页 > 代码库 > 记一次jquery file upload的断点续传的问题的纠结历程

记一次jquery file upload的断点续传的问题的纠结历程

相关参考:http://www.cnblogs.com/ASPNET2008/p/3360427.html

开始打算做断点续传的时候直接拷贝的这一串代码,放到我的项目里面之后Request.Files中的Filename获取到的一直是"blob",

然后我就拖啊拖了很久,后来打算放弃掉不做了,昨天测试Jquer File Upload这个上传组件的时候发现超过2G的文件死都传不上去!

1   <system.web>2         <httpRuntime maxRequestLength="2147483647" executionTimeout="3600"/>3         <compilation debug="true" targetFramework="4.0"/>4     <customErrors mode="Off"/>5     </system.web>

后来发现设置完之后支持的最大文件大小就差不多2G左右的样子,然后我又重新去做文件的断点续传!希望可以搞定这个问题!

但是!还是获取不到FileName!!!!

然后!我就换了一种方式用了Request.Headers["X-File-Name"],果然获取到FileName了!

但是!saveas里面又得不到content-range的值了!

又是一番纠结之后,发现是因为我用的插件的版本太低了。。然后!我又去官网上下载了最新版本的插件!

果然!不存在FileName和content-range获取不到的问题了!

又但是!超出2G的文件2G以上的部分还是不能上传!也是败给那个博主了!根本没有考虑过超大文件的问题嘛!

 1 private void SaveAs(string saveFilePath, HttpPostedFile file) 2 { 3     long lStartPos = 0; 4     int startPosition = 0; 5     int endPosition = 0; 6     var contentRange=HttpContext.Current.Request.Headers["Content-Range"]; 7     //bytes 10000-19999/1157632 8     if (!string.IsNullOrEmpty(contentRange)) 9     {10         contentRange = contentRange.Replace("bytes", "").Trim();11         contentRange = contentRange.Substring(0, contentRange.IndexOf("/"));12         string[] ranges = contentRange.Split(-);13         startPosition = int.Parse(ranges[0]);14         endPosition = int.Parse(ranges[1]);15     }16     System.IO.FileStream fs;17     if (System.IO.File.Exists(saveFilePath))18     {19         fs = System.IO.File.OpenWrite(saveFilePath);20         lStartPos = fs.Length;21          22     }23     else24     {25         fs = new System.IO.FileStream(saveFilePath, System.IO.FileMode.Create);26         lStartPos = 0;27     }28     if (lStartPos > endPosition)29     {30         fs.Close();31         return;32     }33     else if (lStartPos < startPosition)34     {35         lStartPos = startPosition;36     }37     else if (lStartPos > startPosition && lStartPos < endPosition)38     {39         lStartPos = startPosition;40     }41     fs.Seek(lStartPos, System.IO.SeekOrigin.Current);42     byte[] nbytes = new byte[512];43     int nReadSize = 0;44     nReadSize = file.InputStream.Read(nbytes, 0, 512);45     while (nReadSize > 0)46     {47         fs.Write(nbytes, 0, nReadSize);48         nReadSize = file.InputStream.Read(nbytes, 0, 512);49     }50     fs.Close();          51 }

注意13行!14行!文件字节超出2G的时候int已经超出范围!

就是要把变量设置成long的数据类型嘛!

终于,一个多月过去了。。。

还是被我搞定了啊哈哈哈哈!!!!!

 

记一次jquery file upload的断点续传的问题的纠结历程