2013-06-12 54 views
1

我試圖從我的機器發送一個文件到瀏覽器,以便它可以在我正在處理的.NET應用程序中下載。我正在使用this SO答案中的代碼,但使用FileWebRequest而不是使用HttpWebRequest,因爲我正在訪問本地計算機上的文件。請求如下所示: FileWebRequest fileReq = (FileWebRequest)WebRequest.Create(@"file:///C:/Tmp/new.html");當我將url file:///C:/Tmp/new.html複製到瀏覽器中時,它會給我正確的文件。但是當我在我的代碼中使用fileReq.ContentLength時,它總是返回0,這導致我相信該文件由於某種原因而未被讀取。誰能告訴我這裏發生了什麼?FileWebRequest不返回它應該的內容

編輯:這裏是我的代碼,就像我從另一個SO問題完全一樣,但我用FileWebRequest而不是HttpWebRequest。

 Stream stream = null; 
     int bytesToRead = 10000; 
     byte[] buffer = new Byte[bytesToRead]; 
     try 
     {    
      FileWebRequest fileReq = (FileWebRequest)WebRequest.Create(@"file:///C:/Tmp/new.html"); 
      FileWebResponse fileResp = (FileWebResponse)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-dsiposition", "attachment; filename=" + url); 
       resp.AddHeader("Content-Length", fileResp.ContentLength.ToString()); 

       int length; 
       do 
       { 
        if (resp.IsClientConnected) 
        { 
         length = stream.Read(buffer, 0, bytesToRead); 
         resp.OutputStream.Write(buffer, 0, length); 
         resp.Flush(); 
         buffer = new Byte[bytesToRead]; 
        } 
        else 
        { 
         length = -1; 
        } 
       } while (length > 0); 
      } 
     } 
     catch (Exception ex) 
     { 
      FileLabel.Text = ex.Message.ToString(); 
     } 
     finally 
     { 
      if (stream != null) 
      { 
       stream.Close(); 
      } 
     } 
+0

提供您寫下的實際代碼。 –

+0

爲什麼你不打開文件並將其提供給響應?爲什麼用請求/響應對「打開」它?你有沒有考慮過Response.TransmitFile? – Alexander

+0

@Alexander這聽起來像我想要做的,你能否詳細說明如何做到這一點? – azrosen92

回答

0

嘗試WebClient類。

public static void Main (string[] args) 
{ 
    if (args == null || args.Length == 0) 
    { 
     throw new ApplicationException ("Specify the URI of the resource to retrieve."); 
    } 
    WebClient client = new WebClient(); 

    // Add a user agent header in case the 
    // requested URI contains a query. 

    client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 

    Stream data = client.OpenRead (args[0]); 
    StreamReader reader = new StreamReader (data); 
    string s = reader.ReadToEnd(); 
    Console.WriteLine (s); 
    data.Close(); 
    reader.Close(); 

tutorial here

相關問題