ASP.Net 에서 큰 파일 을 다운로드 하 는 실현 방법
Google 사이트 가 큰 파일 다운 로드 를 지원 해 야 할 때 제어 하지 않 으 면 사용자 가 다운로드 페이지 를 방문 할 때 응답 하지 않 아 브 라 우 저 를 붕괴 시 킬 수 있 습 니 다.다음 코드 를 참고 하여 이 문 제 를 피 할 수 있 습 니 다.
이 코드 에 대한 몇 가지 설명:
1.데 이 터 를 작은 부분 으로 나 눈 다음 에 출력 흐름 으로 이동 하여 다운로드 할 수 있 도록 합 니 다.
2.다운로드 한 파일 형식 에 따라 Response.ContentType 을 지정 합 니 다.(OSChina 의 이 주 소 를 참고 하면 대부분의 파일 형식의 대조 표를 찾 을 수 있 습 니 다.http://tool.oschina.net/commons)
3.response 를 쓸 때마다 Response.Flush()를 호출 하 십시오.
4.반복 적 으로 다운로드 하 는 과정 에서 Response.IsClient Connected 를 사용 하면 프로그램 이 가능 한 한 빨리 연결 이 정상 인지 확인 할 수 있 습 니 다.정상 이 아니라면 서버 자원 을 사용 하기 위해 다운 로드 를 일찍 포기 할 수 있 습 니 다.
5.다운로드 가 끝 난 후에 Response.End()를 호출 하여 현재 스 레 드 가 마지막 에 종 료 될 수 있 도록 해 야 합 니 다.
using System;
namespace WebApplication1
{
public partial class DownloadFile : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
System.IO.Stream iStream = null;
// Buffer to read 10K bytes in chunk:
byte[] buffer = new Byte[10000];
// Length of the file:
int length;
// Total bytes to read.
long dataToRead;
// Identify the file to download including its path.
string filepath = Server.MapPath("/") +"./Files/TextFile1.txt";
// Identify the file name.
string filename = System.IO.Path.GetFileName(filepath);
try
{
// Open the file.
iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
System.IO.FileAccess.Read, System.IO.FileShare.Read);
// Total bytes to read.
dataToRead = iStream.Length;
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "text/plain"; // Set the file type
Response.AddHeader("Content-Length", dataToRead.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
// Read the bytes.
while (dataToRead > 0)
{
// Verify that the client is connected.
if (Response.IsClientConnected)
{
// Read the data in buffer.
length = iStream.Read(buffer, 0, 10000);
// Write the data to the current output stream.
Response.OutputStream.Write(buffer, 0, length);
// Flush the data to the HTML output.
Response.Flush();
buffer = new Byte[10000];
dataToRead = dataToRead - length;
}
else
{
// Prevent infinite loop if user disconnects
dataToRead = -1;
}
}
}
catch (Exception ex)
{
// Trap the error, if any.
Response.Write("Error : " + ex.Message);
}
finally
{
if (iStream != null)
{
//Close the file.
iStream.Close();
}
Response.End();
}
}
}
}
본 고 에서 말 한 것 이 여러분 의 asp.net 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Nginx 다운로드 시. ipa 또는. apk 파일 처리 방법nginx 의 conf / time. typs 에 추가:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.