2009-07-20 5 views
3

저는 사용자가 파일을 다운로드 할 수있는 ASP.NET 웹 사이트에서 작업하고 있습니다. 이전 파일이 우리가 할 수있는 웹 사이트와 같은 서버에 저장되어HTTP를 통한 파일 전송을위한 Response.TransmitFile의 대안

은 :

Response.Clear(); 
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); 
Response.AddHeader("Content-Length", response.ContentLength.ToString()); 
Response.ContentType = "application/octet-stream"; 
Response.TransmitFile(path); 
Response.End(); 

그러나 지금 파일 중 일부가 별도의 서버에 저장됩니다. 파일이 존재하는지 확인할 수 있습니다

WebRequest request = WebRequest.Create(absolute-url); 
WebResponse response = request.GetResponse(); 

그러나 TransmitFile은 URL이 아닌 가상 경로가 필요하므로 어떻게 전송할 수 있습니까?

나는 사용자는 어디 정상적인 웹 다운로드

이 작업을 수행하는 가장 좋은 방법은 무엇입니까와 마찬가지로 파일을 저장하는 방법을 선택 할 수 있어야합니다?

+0

내가 순진하고 있지 않다 바랍니다. 다른 서버에 파일의 URL이있는 하이퍼 링크를 제공 할 수 있습니다 (직접 파일을 추적하거나 파일이 클라이언트로 전송되기 전에 사전 처리를 원할 경우 제외). – shahkalpesh

답변

1
  1. 사용자를 다른 서버의 URL로 리디렉션 할 수 있습니까?
  2. 요청을 다른 서버로 프록시 처리 할 수 ​​있습니다. "GetResponse"를 호출하면 스트림을 가져 와서 해당 내용을 Response 객체에 씁니다.
+0

그 API는 Reponse.BinaryWrite입니다. –

+0

다운로드가 웹 브라우저에서 일반적으로 열 수있는 이미지 인 경우에도 사용자가 각 인스턴스에 파일을 저장하라는 메시지를 표시해야하므로 리디렉션 할 수 없습니다. 요청을 프록시하는 방법에 대한 예제를 제공해 주시겠습니까? 나는 당신이 의미하는 바를 잘 모르겠다! 제안 해 주셔서 감사합니다 – mancmanomyst

+1

유일한 요구 사항은 사용자가 파일을 저장할 것인지 묻는 메시지를 표시해야하는 경우 IIS MMC를 통해 사용자 지정 HTTP 헤더를 폴더에 추가하고 "Content-Disposition"을 "attachment"로 설정하는 것입니다 당신은 C#에서하고 있습니다. 그런 다음 파일로의 일반 경로 재 지정이 작동합니다. – David

0

원격 서버의 드라이브를 공유로 매핑 한 다음 TransmitFile을 사용할 수 있습니다. 서버에 시선이없는 경우 원격 서버에서 WebDAV를 활성화 한 다음 실제 경로에 매핑하고 TransmitFile을 사용할 수 있습니다.

2

원격 파일에는 TransferFile을 사용할 수 없습니다. 그러나이 경우 WriteFile을 사용할 수 있습니다. 당신은 웹 요청을 통해 응답 스트림을 얻을 수있는 경우

+0

은 매력처럼 작동했습니다. 다른 서버에서 경로를 사용하고 있습니다. TransmitFile이 작동하지 않았지만이 작업은 정상적으로 수행됩니다. – TruthOf42

5

이 조각에 따라 당신의 출력 스트림에 스트림을 복사 할 수 있어야한다 :

while ((read = stream.Read(buffer, offset, chunkSize)) > 0)  
{ 

    Response.OutputStream.Write(buffer, 0, read); 
    Response.Flush(); 
}