Aspnet
C# 서버에서 파일을 다운로드할 때 TransmitFile, WriteFile, WriteFile, streaming 등 네 가지 방법을 사용하여 파일을 다운로드하고 적절한 유형으로 저장할 수 있습니다.
1, transmile Void? Button1 _ click (개체? Sender,? EventArgs? E)
{
/*?
Microsoft 는 Response.binarywrite 사용을 해결하기 위해 response 개체에 대한 새로운 TransmitFile 방법을 제공합니다.
4mb 가 넘는 파일을 다운로드할 때 Aspnet_wp.exe 프로세스가 재활용되어 성공적으로 다운로드할 수 없는 문제가 발생합니다. -응?
코드는 다음과 같습니다.
*/?
Response.ContentType? =? 응용 프로그램/x-zip-compressed;
response.addheader ("content-disposition",? "attachment; Filename=z.zip ");
string? 파일 이름? =? Server.MapPath("DownLoad/z.zip ");
response.transmitfile (파일 이름);
}
2, WriteFile 구현 다운로드 protected? Void? Button2 _ click (개체? Sender,? EventArgs? E)
{
/*?
using? System.IO;
*/
string? 파일 이름? =? "asd.txt"; //클라이언트가 저장한 파일 이름?
string? 파일 경로? =? Server.mappath ("download/aaa.txt"); //경로
FileInfo? FileInfo? =? 새? Fileinfo (파일 경로);
Response.Clear ();
Response.ClearContent ();
Response.ClearHeaders ();
response.addheader ("content-disposition",? "attachment; Filename= "? +? FileName);
response.addheader ("content-length",? FileInfo.Length.ToString ());
response.addheader ("content-transfer-encoding",? "비나리");
Response.ContentType? =? 응용 프로그램/octet-stream;
Response.ContentEncoding? =? System.text.encoding.getencoding ("gb2312");
response.writefile (fileinfo.fullname);
Response.Flush ();
Response.End ();
}
3, WriteFile 블록 다운로드? Protected? Void? Button3 _ click (개체? Sender,? EventArgs? E)
{
문자열? 파일 이름? =? "aaa.txt"; //클라이언트가 저장한 파일 이름?
string? 파일 경로? =? Server.mappath ("download/aaa.txt"); //경로
System.IO.FileInfo? FileInfo? =? 새? System.io.fileinfo (파일 경로);
if? (fileInfo.Exists? = =? 참)
{
const? 롱? ChunkSize? =? 124; //1K? 매번 파일을 읽을 때마다 1K 만 읽는데, 이렇게 하면 서버의 스트레스를 완화할 수 있습니까?
byte[]? 버퍼? =? 새? Byte[ChunkSize];
Response.Clear ();
System.IO.FileStream? IStream? =? System.io.file.openread (파일 경로);
long? DataLengthToRead? =? IStream.Length; //다운로드한 파일의 총 크기를 가져오시겠습니까?
Response.ContentType? =? 응용 프로그램/octet-stream;
response.addheader ("content-disposition",? "attachment; -응? Filename= "? +? Httputility.urlencode (파일 이름));
while? (dataLengthToRead? > -응? ? & & -응? Response.isclientconnected)
{
int? LengthRead? =? IStream.Read(buffer,? ,? Convert.ToInt32(ChunkSize)); //읽은 크기?
response.outputstream.write (buffer,? ,? LengthRead);
Response.Flush ();
dataLengthToRead? =? DataLengthToRead? -응? LengthRead;
}
Response.Close ();
}
}
4, protected 스트리밍 다운로드? Void? Button4 _ click (개체? Sender,? EventArgs? E)
{
문자열? 파일 이름? =? "aaa.txt"; //클라이언트가 저장한 파일 이름?
string? 파일 경로? =? Server.mappath ("download/aaa.txt"); //경로
// 문자 스트림으로 파일 다운로드?
FileStream? Fs? =? 새? Filestream (파일 경로,? FileMode.Open);
byte[]? 바이트? =? 새? Byte[(int)fs.Length];
fs.Read(bytes,? ,? Bytes.Length);
fs.Close ();
Response.ContentType? =? 응용 프로그램/octet-stream;
// 파일을 열지 않고 다운로드하도록 브라우저에 알리시겠습니까?
response.addheader ("content-disposition",? "attachment; -응? Filename= "? +? Httputility.urlencode (파일 이름,? System.Text.Encoding.UTF8);
Response.BinaryWrite(bytes);
Response.Flush ();
Response.End ();
}