记一次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     else
24     {
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的数据类型嘛!

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

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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。