2012-10-11 3 views
1

Мне нужно скачать файл как http-ответ для текущего HTTP-запроса.Загрузка файла Для текущего запроса

До сих пор я использовал код как

System.Uri uri = System.Web.HttpContext.Current.Request.Url; 

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(
    Path.Combine(uri.ToString(), filename)); 

httpRequest.Method = "GET"; 

using (HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse()) 
{     
    using (Stream responseStream = httpResponse.GetResponseStream()) 
    { 
     using (FileStream localFileStream = new FileStream(
      Path.Combine(localFolder, filename), FileMode.Open)) 
     {     
      int bytesRead; 

      while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       totalBytesRead += bytesRead;  
       localFileStream.Write(buffer, 0, bytesRead); 
      } 
     } 
    } 
} 

Но этот код запрос только отправка, но не получая никаких ответов ...

Возможно ли это?

+1

Вы пробовали 'WebClient.DownloadFile()'? http://msdn.microsoft.com/en-us/library/ez801hhe.aspx ... может сделать вещи немного проще, если все, что вы пытаетесь сделать, это загрузить файл. – Arran

+0

no не попробует, а затем обновит вас – GowthamanSS

+0

ссылка, которую мы дали, нам нужно указать полный путь для загрузки файла, но моя задача - отправить файл в ответ на этот запрос и загрузить его – GowthamanSS

ответ

2

Вы должны получить файл с диска, а затем использовать Response.OutputStream, чтобы записать файл непосредственно в ответ. Не забудьте установить правильные заголовки содержимого, чтобы браузер знал, что произойдет.

FileInfo file = new FileInfo(Path.Combine(localFolder, filename)); 
int len = (int)file.Length, bytes; 
Response.ContentType = "text/plain"; //Set the file type here 
Response.AddHeader "Content-Disposition", "attachment;filename=" + filename; 
context.Response.AppendHeader("content-length", len.ToString()); 
byte[] buffer = new byte[1024]; 

using(Stream stream = File.OpenRead(path)) { 
    while (len > 0 && (bytes = 
     stream.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     Response.OutputStream.Write(buffer, 0, bytes); 
     len -= bytes; 
    } 
} 
+0

спасибо за ваш ответ, даже если это zip файл, мы можем выполнить следующие шаги: ах – GowthamanSS

+0

он хорошо работает с веб-сайтом или веб-приложением ... но мне нужно создать проект библиотеки C#. Я получаю ошибку, как в этом http://stackoverflow.com/questions/12859606/sending- httpresponses-в-библиотеки-файлы с острыми – GowthamanSS

0

Не уверен, но похоже, что вы делаете веб-запрос, получая поток ответов, а затем пытаетесь его откорректировать до localFolder. Если это так, FileMode.Open выглядит подозрительным («должен открыть существующий файл ...»?). Возможно, используйте FileMode.Create.

MSDN ref

Кроме того, делает ваш веб-приложение должно иметь права на запись в localFolder.

Смежные вопросы