2012-10-25 1 views
0
string FilePath = HttpUtility.UrlDecode(Request.QueryString.ToString()); 
    string[] s = FilePath.Split(new char[] { ',' }); 
    string path = s[0]; 
    string FileName = s[1]; 
    String str = HttpContext.Current.Request.Url.AbsolutePath; 
     System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
     response.ClearContent(); 
     response.Clear(); 
     // response.ContentType = "text/plain"; 
     response.AddHeader("Content-Disposition", "attachment; filename=" + FileName+ ";"); 
     response.TransmitFile(path+FileName); 
     response.Flush(); 
     response.End(); 

위의 코드는 다른 페이지에서 오디오 파일의 위치를 ​​얻는 코드입니다. 오디오 파일은 URL을 사용하여 액세스 할 수있는 원격 시스템에 있습니다. http : \ servername \ audiofiles \ filename.wav. response.Transmit 및 .WriteFile에는 가상 경로가 필요하지만, response.Write()에는 파일이 다운로드되지 않습니다. 어떻게 파일을 다운로드하는 대신 가상 경로의 절대 URL을 제공 할 수 있습니다절대 경로를 사용하여 클라이언트 측에서 파일 다운로드 .NET

+0

내가 대화하지 WebClient를의 다운로드 기능으로 저장 사용하여 다운로드 할 것이다는 –

답변

0

는 다른 장소에서 내 스스로 답을 찾을 수 없습니다

 string FilePath = HttpUtility.UrlDecode(Request.QueryString.ToString()); 
    string[] s = FilePath.Split(new char[] { ',' }); 
    string path = s[0]; 
    string FileName = s[1]; 

    int bytesToRead = 10000; 


    byte[] buffer = new Byte[bytesToRead]; 


    try 
    { 
     HttpWebRequest fileReq = (HttpWebRequest)HttpWebRequest.Create(path+FileName); 

     HttpWebResponse fileResp = (HttpWebResponse)fileReq.GetResponse(); 

     if (fileReq.ContentLength > 0) 
      fileResp.ContentLength = fileReq.ContentLength; 


     stream = fileResp.GetResponseStream(); 


     var resp = HttpContext.Current.Response; 


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

     resp.AddHeader("Content-Disposition", "attachment; filename=\"" + FileName + "\""); 
     resp.AddHeader("Content-Length", fileResp.ContentLength.ToString()); 

     int length; 
     do 
     { 
      if (resp.IsClientConnected) 
      { 
       // Read data into the buffer. 
       length = stream.Read(buffer, 0, bytesToRead); 

       // and write it out to the response's output stream 
       resp.OutputStream.Write(buffer, 0, length); 


       resp.Flush(); 

       //Clear the buffer 
       buffer = new Byte[bytesToRead]; 
      } 
      else 
      { 
       // cancel the download if client has disconnected 
       length = -1; 
      } 
     } while (length > 0); //Repeat until no data is read 
    } 
    finally 
    { 
     if (stream != null) 
     { 
      //Close the input stream 
      stream.Close(); 
     } 
    } 
} 
+0

우리는 사용할 수 HttpWebRequest를 사용하여 파일을 가져 와서 클라이언트로 다시 스트리밍합니다. 코드는 또한 대화 상자로 저장을 생성합니다. Response.Transmit 및 다른 사용자는 URL을 가져올 수 없습니다. –

관련 문제