日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件以附件形式下载的方法

發(fā)布時(shí)間:2024/4/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件以附件形式下载的方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?1//?輸出硬盤文件,提供下載?支持大文件、續(xù)傳、速度限制、資源占用小
?2????????//?輸入?yún)?shù)?_Request:?Page.Request對(duì)象,??_Response:?Page.Response對(duì)象,?_fileName:?下載文件名,?_fullPath:?帶文件名下載路徑,?_speed?每秒允許下載的字節(jié)數(shù)
?3????????//?返回是否成功
?4????????public?static?bool?ResponseFile(HttpRequest?_Request,HttpResponse?_Response,string?_fileName,string?_fullPath,?long?_speed)
?5????????{
?6????????????try
?7????????????{
?8????????????????FileStream?myFile?=?new?FileStream(_fullPath,?FileMode.Open,?FileAccess.Read,?FileShare.ReadWrite);
?9????????????????BinaryReader?br?=?new?BinaryReader(myFile);
10????????????????try
11????????????????{
12????????????????????_Response.AddHeader("Accept-Ranges",?"bytes");
13????????????????????_Response.Buffer?=?false;
14????????????????????long?fileLength?=?myFile.Length;
15????????????????????long?startBytes?=?0;
16?????
17????????????????????int?pack?=?102400;?//10K?bytes
18????????????????????//int?sleep?=?200;???//每秒5次???即5*10K?bytes每秒
19????????????????????int?sleep?=?(int)Math.Floor(1000?*?pack?/?_speed)?+?1;
20????????????????????if?(_Request.Headers["Range"]?!=?null)
21????????????????????{
22????????????????????????_Response.StatusCode?=?206;
23????????????????????????string[]?range?=?_Request.Headers["Range"].Split(new?char[]?{'=',?'-'});
24????????????????????????startBytes?=?Convert.ToInt64(range[1]);
25????????????????????}

26????????????????????_Response.AddHeader("Content-Length",?(fileLength?-?startBytes).ToString());
27????????????????????if?(startBytes?!=?0)
28????????????????????{
29????????????????????????_Response.AddHeader("Content-Range",?string.Format("?bytes?{0}-{1}/{2}",?startBytes,?fileLength-1,?fileLength));
30????????????????????}

31????????????????????_Response.AddHeader("Connection",?"Keep-Alive");
32????????????????????_Response.ContentType?=?"application/octet-stream";
33????????????????????_Response.AddHeader("Content-Disposition","attachment;filename="?+?HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8)?);
34?
35????????????????????br.BaseStream.Seek(startBytes,?SeekOrigin.Begin);
36????????????????????int?maxCount?=?(int)?Math.Floor((fileLength?-?startBytes)?/?pack)?+?1;
37
38????????????????????for?(int?i?=?0;?i?<?maxCount;?i++)
39????????????????????{
40????????????????????????if?(_Response.IsClientConnected)
41????????????????????????{
42????????????????????????????_Response.BinaryWrite(br.ReadBytes(pack));
43????????????????????????????Thread.Sleep(sleep);
44????????????????????????}

45????????????????????????else
46????????????????????????{
47????????????????????????????i=maxCount;?
48????????????????????????}

49????????????????????}

50????????????????}

51????????????????catch
52????????????????{
53????????????????????return?false;
54????????????????}

55????????????????finally
56????????????????{
57????????????????????br.Close();
58????????????????????myFile.Close();
59????????????????}

60????????????}

61????????????catch
62????????????{
63????????????????return?false;
64????????????}

65????????????return?true;
66????????}

轉(zhuǎn)載于:https://www.cnblogs.com/bluesky4485/archive/2008/03/28/1127823.html

總結(jié)

以上是生活随笔為你收集整理的文件以附件形式下载的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。