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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

[导入]ASP.NET断点续传和多线程下载

發(fā)布時間:2025/4/5 asp.net 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [导入]ASP.NET断点续传和多线程下载 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??? 在解決etag的問題后,那個.vga文件還是不能正常播放,我只好用最后一招,通過VS.NET斷點(diǎn)來監(jiān)測程序的流程,在我檢查Request.Header的時候,忽然發(fā)現(xiàn)一項(xiàng):"Accept-Ranges: bytes0-31",這是什么東東?好像很熟的樣子,通過在flashget中一看才知道,原來是斷點(diǎn)續(xù)傳的起始位置和結(jié)束位置。我忽然想起我的系統(tǒng)不支持?jǐn)帱c(diǎn)續(xù)傳,而這個再現(xiàn)播放的控件應(yīng)該是通過斷點(diǎn)續(xù)傳實(shí)現(xiàn)的,這應(yīng)該就是問題所在。
??? 知道問題就好說了,從網(wǎng)上參考了一段代碼用來搞斷點(diǎn)續(xù)傳的(Asp.net(c#)實(shí)現(xiàn)多線程斷點(diǎn)續(xù)傳)。
??? 看起來確實(shí)不錯,通過了flashget的測試。
??? 可是我用來測試那個screen.vga,可是依然不能顯示,究竟是什么原因呢?
??? 繼續(xù)用VS.NET斷點(diǎn)來監(jiān)測程序的流程,終于發(fā)現(xiàn)問題所在,原來flashget使用Accept-Ranges: bytes0-格式的header來發(fā)送請求,也就是說只講明從什么地方開始而不講明結(jié)束(莫認(rèn)識文件尾部),而上面的程序也是針對flashget來設(shè)計(jì)的,卻沒有考慮到Accept-Ranges: bytes0-31這種有頭有尾的格式。
??? 那就容易了,到現(xiàn)在,也該自己寫寫代碼了,不能總靠從網(wǎng)上找現(xiàn)成的,呵呵
??? 以下是整個load.aspx的代碼:

?

<%@?import?Namespace="System.IO"?%>
<script?runat="server">
????
private?void?Page_Load(object?sender,?System.EventArgs?e)
????
{
?
string?queryString=Request.QueryString.GetValues(0)[0];
?
string?fileSpec=Page.Server.MapPath("../resData/"+queryString);
//設(shè)置響應(yīng)時間,以備大文件輸出
????????Page.Server.ScriptTimeout=30000000;
?
//開始輸出文件
?System.IO.Stream?iStream?=?null;
?
byte[]?buffer?=?new?Byte[10000];
?
int?length;
?
long?dataToRead;
?FileInfo?fileInfo
=new?FileInfo(fileSpec);

?
try
?
{//清空已有內(nèi)容
??Response.ClearContent();
??Response.ClearHeaders();
//開始檢測Range中的斷點(diǎn)續(xù)傳塊信息
??long?startPoint?=?0,endPoint=fileInfo.Length-1;
??
if(Request.Headers["Range"]!=null)
??
{
???Response.StatusCode?
=?206;
???
string?temp=Request.Headers["Range"].Replace("bytes=","");
???
if(!temp.StartsWith("-"))
????startPoint
=?long.Parse(temp.Substring(0,temp.IndexOf(''-'')));
???
if(!temp.EndsWith("-"))
????endPoint
=long.Parse(temp.Substring(temp.IndexOf(''-'')+1));
??}

//返回塊信息和文件大小
??Response.AppendHeader("Content-Range","bytes?"?+?startPoint.ToString()?+?"-"?+endPoint.ToString()?+?"/"?+?fileInfo.Length.ToString());???
??Response.AppendHeader(
"Content-Length",((long)(endPoint-startPoint+1)).ToString());
//添加依賴文件,設(shè)置etag和LastModified,文件名等頭信息
??Response.AddFileDependency(fileSpec);
??Response.Cache.SetCacheability(HttpCacheability.Public);
??Response.Cache.SetETagFromFileDependencies();
??Response.Cache.SetLastModifiedFromFileDependencies();
??Response.AppendHeader(
"Content-Disposition","attachment;filename="+System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(fileInfo.Name)));
??Response.ContentType?
=?GetContentType(fileSpec);

//開始輸出文件
??iStream?=?new?System.IO.FileStream(fileSpec,?System.IO.FileMode.Open,System.IO.FileAccess.Read,System.IO.FileShare.Read);
??iStream.Position?
=?startPoint;
??dataToRead?
=?endPoint?-?startPoint+1;
??
while?(dataToRead?>?0)
??
{
???
if?(Response.IsClientConnected)?
???
{
????
if(dataToRead>10000)
?????length
=10000;
????
else
?????length
=(int)dataToRead;
????length?
=?iStream.Read(buffer,?0,length);
????Response.OutputStream.Write(buffer,?
0,?length);
????Response.Flush();
????buffer
=?new?Byte[10000];
????dataToRead?
=?dataToRead?-?length;
???}

???
else
???
{
????dataToRead?
=?-1;
???}

??}

?}

?
catch?(Exception?ex)?
?
{
??Response.Write(
"Error?:?"?+?ex.Message);
?}

?
finally
?
{
??
if?(iStream?!=?null)?
??
{
???iStream.Close();
??}

?}


????}



????
private?string?GetContentType(string?fileSpec)
????
{
?
string?contentType;
?
switch?(Path.GetExtension(fileSpec))
?
{
case?".3gp":?contentType="audio/AMR-WB-encrypted";?break;
case?".m4a":?contentType="audio/m4a";??break;
case?".mid":?contentType="audio/midi";??break;
case?".mp1":?contentType="audio/mp1";??break;
case?".mp2":?contentType="audio/mp2";??break;
case?".mp3":?contentType="audio/mpeg";??break;
case?".m3u":?contentType="audio/mpegurl";??break;
case?".mpga":?contentType="audio/rn-mpeg";??break;
case?".pls":?contentType="audio/scpls";??break;
case?".ra":?contentType="audio/vnd.rn-realaudio";?break;
case?".wav":?contentType="audio/wav";??break;
case?".aiff":?contentType="audio/x-aiff";??break;
case?".wax":?contentType="audio/x-ms-wax";??break;
case?".wma":?contentType="audio/x-ms-wma";??break;
case?".aif":?contentType="audio/x-pn-aiff";??break;
case?".au":?contentType="audio/x-pn-au";??break;
case?".ram":?contentType="audio/x-pn-realaudio";?break;
case?".rms":?contentType="audio/x-realaudio-secure";?break;
case?".bmp":?contentType="image/bmp";??break;
case?".gif":?contentType="image/gif";??break;
case?".jpg":?contentType="image/jpeg";??break;
case?".png":?contentType="image/png";??break;
case?".tif":?contentType="image/tiff";??break;
case?".rp":?contentType="image/vnd.rn-realpix";?break;
case?".ico":?contentType="image/x-icon";??break;
case?".xbm":?contentType="image/x-xbitmap";??break;
case?".css":?contentType="text/css";???break;
case?".htm":?contentType="text/html";??break;
case?".uls":?contentType="text/iuls";??break;
case?".txt":?contentType="text/plain";??break;
case?".wsc":?contentType="text/scriptlet";??break;
case?".rt":?contentType="text/vnd.rn-realtext";?break;
case?".htt":?contentType="text/webviewhtml";??break;
case?".htc":?contentType="text/x-component";??break;
case?".vcf":?contentType="text/x-vcard";??break;
case?".xml":?contentType="text/xml";???break;
case?".3g2":?contentType="video/3gpp2";??break;
case?".mpeg":?contentType="video/mpeg";??break;
case?".avi":?contentType="video/msvideo";??break;
case?".rv":?contentType="video/vnd.rn-realvideo";?break;
case?".mpa":?contentType="video/x-mpg";??break;
case?".asx":?contentType="video/x-ms-asf";??break;
case?".asf":?contentType="video/x-ms-asf";??break;
case?".wm":?contentType="video/x-ms-wm";??break;
case?".wmv":?contentType="video/x-ms-wmv";??break;
case?".wmx":?contentType="video/x-ms-wmx";??break;
case?".vga":?contentType="PowerCreator?VGAPlayer.Document";?break;
default:?contentType="Application/"+Path.GetExtension(fileSpec);break;
?}

????
return?contentType;
????}

總結(jié)

以上是生活随笔為你收集整理的[导入]ASP.NET断点续传和多线程下载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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