asp.Netネットワークファイルのダウンロード

13142 ワード

ウェブサイトの設計の過程で、圧縮パッケージ、ドキュメント、映画・テレビ資源など、アップロードされたファイルをダウンロードする必要があります.では、ダウンロードできる機能が必要です.もちろん、一般的なダウンロード機能は、ユーザーに保存または開くように促すことができ、ダウンロード中にリアルタイムで進捗と速度を提示し、ダウンロードの大きさを提示することができます.ダウンロード中に、エラーが発生したときに、異常エラーを報告することができます.これ以上ないでしょう.今日の例では、システムのダウンロード例を呼び出しました.具体的には、コードを参照してください.

  
private bool DownLoadFile()
{
//
string filePath = Server.MapPath( " ~/DownLoad/myFiles " );
string downLoadFile = " test.mkv " ;

FileInfo fileName
= new FileInfo(filePath + " \\ " + downLoadFile);
FileStream fileStream
= new FileStream(filePath + " \\ " + downLoadFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

//
BinaryReader binaryReader = new BinaryReader(fileStream);

//
if (fileName.Exists)
{
try
{
long startBytes = 0 ;
string lastUpdateTimeStamp = File.GetLastWriteTimeUtc(filePath).ToString( " r " );
string encodeData = HttpUtility.UrlEncode(downLoadFile, Encoding.UTF8) + lastUpdateTimeStamp;

// response
Response.Clear();
Response.Buffer
= false ;
Response.AddHeader(
" Accept-Ranges " , " bytes " );
Response.AppendHeader(
" ETag " , " \" " + encodeData + " \" " );
Response.AppendHeader(
" Last-Modified " , lastUpdateTimeStamp);

// contenttype
Response.ContentType = " application/octet-stream " ;

//
Response.AddHeader( " Content-Disposition " , " attachment;filename= " + fileName.Name);

Response.AddHeader(
" Content-Length " , (fileName.Length - startBytes).ToString());
Response.AddHeader(
" Connection " , " Keep-Alive " );

//
Response.ContentEncoding = Encoding.UTF8;

//
binaryReader.BaseStream.Seek(startBytes, SeekOrigin.Begin);

// , 1024
int maxCount = ( int )Math.Ceiling((fileName.Length - startBytes + 0.0 ) / 1024 );

// 1024 ,
int i;
for (i = 0 ; i < maxCount && Response.IsClientConnected; i ++ )
{
Response.BinaryWrite(binaryReader.ReadBytes(
1024 ));
Response.Flush();
}

//
if (i < maxCount) return false ;
return true ;
}
catch
{
return false ;
}
finally
{
//
Response.End();
binaryReader.Close();
fileStream.Close();
}
}
else
{
ScriptManager.RegisterStartupScript(
this , GetType(), " " , " alert(' !') " , true );
}
return false ;
}

具体的なコードはもう注釈しました.役に立つことを望んでいます.