컴퓨터 지식 네트워크 - 컴퓨터 학습 - asp.net(c#) 파일에 대한 질문

asp.net(c#) 파일에 대한 질문

파일 경로가 중국어인가요? zh-tw 이것은 중국어 번체입니다!

asp.net2.0 이후에는 파일 다운로드에 대한 다양한 옵션이 있습니다.

public 부분 클래스 FileDownLoad: System.Web.UI.Page

{

//다운로드한 파일을 제공하지 않으면 파일 이름이 깨집니다.

p>

private string fileName = HttpContext.Current.Server.UrlEncode("Specification.rar")

private string filePath = HttpContext.Current.Server.MapPath( "Specification.rar");

//TransmifFile을 사용하여 파일 다운로드

protected void btnDL1_Click(object sender, EventArgs e)

{

FileInfo info = new FileInfo (filePath);

long fileSize = info.Length;

Response.Clear()

Response.ContentType = "application/x-zip-compressed ";

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

//Flush를 사용하는 경우 Content-Length를 지정하지 않으면 다운로드가 표시되지 않습니다.

Response.AddHeader("Content-Length", fileSize.ToString())

Response.TransmitFile(filePath , 0, fileSize);

Response.Flush();

Response.Close()

}

//사용 파일을 다운로드하기 위한 WriteFile

protected void btnDL2_Click(객체 전송자, EventArgs e)

{

FileInfo info = new FileInfo(filePath)

long fileSize = info.Length;

Response.Clear();

Response.ContentType = "application/octet-stream"; AddHeader("콘텐츠 처리", "파일 첨부

nt;filename=" + fileName);

//파일 크기 지정

Response.AddHeader("Content-Length", fileSize.ToString());

Response.WriteFile(filePath, 0, fileSize);

Response.Flush()

Response.Close(); >

//OutputStream.Write를 사용하여 파일을 청크로 다운로드합니다.

protected void btnDL3_Click(object sender, EventArgs e)

{

//지정 청크 크기

long ChunkSize = 102400;

//100K 버퍼 생성

byte[] buffer = new byte[chunkSize]

//읽은 바이트 수

long dataToRead = 0

FileStream 스트림 = null

try

{

//파일 열기

stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)

dataToRead = stream. /p>

//Http 헤더 추가

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

Response.AddHeader("Content-Disposition", "attachement; filename=" + fileName);

Response.AddHeader("Content-Length", dataToRead.ToString());

while (dataToRead > 0)

{

if (Response.IsClientConnected)

{

int length = stream.Read(buffer, 0, Convert.ToInt32(chunkSize))

Response.OutputStream.Write(buffer, 0, length)

Response.Flush( );

Response.Clear();

dataToRead - 길이

}

else

{

//클라이언트 연결 끊김 방지

dataToRead = -1

}

}

}

catch (예외 예)

{

Response.Write("Error:" + ex.Message)

}

마지막으로

{

if (stream != null)

{

stream.Close() ;

}

Response.Close();

}

}

//BinaryWrite를 사용하여 파일 다운로드, 대용량 파일은 비효율적입니다.

protected void btnDL4_Click(object sender, EventArgs e)

{

FileStream stream = null

try

{

//파일을 읽습니다. 큰 파일을 한 번에 읽으면 많은 메모리를 차지하게 됩니다.

stream = new FileStream(filePath, FileMode. 열기, FileAccess.Read, FileShare.Read)

byte[] bytes = new byte[stream.Length];

stream.Read(bytes, 0, bytes.Length);

stream.Close()

//HTTP 헤더 추가

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

Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName)

응답. AddHeader("Content-Length", bytes.Length.ToString())

Response.BinaryWrite(bytes)

Response.Flush(); > }

catch (예외 예)

{

Response.Write("Error:" + ex.Message); }

마지막으로

{

if (stream != null)

{

stream.Close( );

}

Response.Close();

}

}

//BinaryWrite 사용 청크로 파일 다운로드

protected void btnDL5_Click(object sender, EventArgs e)

{

//청크 및 버퍼 지정

long ChunkSize = 102400;

byte[] buffer = new byte[chunkSize];

FileStream 스트림 = null

long dataToRead = 0;

p>

시도

{

stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare

.Read);

dataToRead = stream.Length;

//Http 헤더 추가

Response.ContentType = "application/octet-stream"; p>

p>

Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName)

Response.AddHeader("Content-Length", dataToRead.ToString ());

while (dataToRead > 0)

{

if (Response.IsClientConnected)

{

int length = stream.Read(buffer, 0, Convert.ToInt32(chunkSize))

Response.BinaryWrite(buffer)

Response.Flush(); /p>

Response.Clear();

dataToRead -= 길이

}

else

{

dataToRead = -1;

}

}

}

catch(예외 예시)

{

Response.Write("오류:" + ex.Message)

}

마지막으로

{

if (stream != null)

{

stream.Close()

}

응답 .닫다();

}

}

}

공개 부분 클래스 FileDownLoad: System.Web.UI.Page { //다운로드한 파일 제공 , 인코딩되지 않으면 파일 이름이 왜곡됩니다. private string fileName = HttpContext.Current.Server.UrlEncode("standard.rar") private string filePath = HttpContext.Current.Server.MapPath("standard.rar"); TransmifFile 다운로드 파일 보호 void btnDL1_Click(object sender, EventArgs e) { FileInfo info = new FileInfo(filePath); long fileSize = info.Length; Response.ContentType = "application/x-zip-compressed" ; Response .AddHeader("Content-Disposition", "attachment;filename="+ fileName); //Content-Length를 지정하지 않고 Flush를 사용하면 다운로드 진행 상황이 표시되지 않습니다. , fileSize.ToString()) ; Response.TransmitFile(filePath, 0, fileSize); Response.Flush(); Response.Close() } //WriteFile을 사용하여 보호된 파일 다운로드 void btnDL2_Click(object sender, EventArgs e) FileInfo info = new FileInfo(filePath) ; long fileSize = info.Length; Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName); //파일 크기 지정 Response.AddHeader("Content-Length", fileSize.ToString()) Response.WriteFile(filePath, 0, fileSize); } //OutputStream.Write를 사용하여 청크 다운로드 파일 protected void btnDL3_Click(object sender, EventArgs e) { //청크 크기 지정 longchunkSize = 102400 //100K 버퍼 생성 byte[] buffer = new byte[chunkSize]; //읽은 바이트 수 long dataToRead = 0 FileStream stream = null try { //파일 열기 스트림 = new FileStream(filePath, FileMode.Ope;

n, FileAccess.Read, FileShare.Read); dataToRead = stream.Length; //Http 헤더 추가 Response.ContentType = "application/octet-stream" Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName); Response.AddHeader("Content-Length", dataToRead.ToString()); while (dataToRead > 0) { if (Response.IsClientConnected) { int length = stream.Read(buffer, 0, Convert.ToInt32( ChunkSize)); Response.OutputStream.Write(buffer, 0, length); Response.Clear(); dataToRead -= length } else { //클라이언트 연결 끊김 방지 } } } catch (예외 ex) { Response.Write("Error:" + ex.Message); } finally { if (stream != null) { stream.Close() } Response.Close(); BinaryWrite를 사용하여 파일을 다운로드하면 비효율적으로 보호됩니다. void btnDL4_Click(object sender, EventArgs e) { FileStream stream = null try { //큰 파일을 한 번에 읽으면 많은 메모리를 차지합니다. stream = new FileStream(filePath) , FileMode.Open, FileAccess.Read, FileShare.Read); byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); //Http 추가 header Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName); Response.AddHeader("Content-Length", bytes.Length.ToString() ); Response.BinaryWrite (바이트); Response.Flush(); } catch (예외 ex) { Response.Write("Error:" + ex.Message) } finally { if (stream != null) (); } Response .Close(); } } //BinaryWrite를 사용하여 보호된 청크로 파일을 다운로드합니다. void btnDL5_Click(object sender, EventArgs e) { //청크 및 버퍼를 지정합니다. ChunkSize = 102400;

byte[] 버퍼 = 새로운 byte[chunkSize]; FileStream 스트림 = null; long dataToRead = 0; try { stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read) / /Http 헤더 추가 Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName); Response.AddHeader("Content-Length", dataToRead.ToString( )); while (dataToRead > 0) { if (Response.IsClientConnected) { int length = stream.Read(buffer, 0, Convert.ToInt32(chunkSize)) Response.BinaryWrite(buffer); .Clear(); dataToRead -= 길이; } else { dataToRead = -1; } } } catch(Exception ex) { Response.Write("Error:" + ex.Message) } finally { if (stream != null ) { stream.Close(); } Response.Close(); } } }

권장되지 않는 네 번째 옵션을 제외하고 다른 모든 옵션은 허용되지만 개인적으로 덩어리로 다운로드하는 것이 좋다고 생각합니다. 더 나은. 주의 깊게 테스트되지 않았으므로 뭔가 문제가 있을 수 있습니다.

참고: 올바르게 표시하려면 중국어 파일 이름을 인코딩해야 합니다. 긴 중국어 파일 이름(UTF8 인코딩 후 153바이트를 초과하는 중국어)의 경우 인코딩하더라도 여전히 문제가 있습니다. 이 링크를 참조하세요.

/river_5566/blog/item/d66804cef8afb031b700c863.html

上篇: '헥신의 기쁨'은 무슨 뜻인가요? 下篇: 자고 책상에서 일어나, 공립전문대학은 산둥성을 공유한다
관련 내용