2017-03-10 80 views
0

我正在嘗試創建代理,基於文本的請求得到正確處理(js,css,html)。但是當我嘗試加載圖像時,我收到圖像包含錯誤的消息。如何通過http傳輸圖像

我已經嘗試了多種方式發送這個通過http,但他們都沒有工作。下面是相關代碼

try 
     { 
      StringBuilder responseString = new StringBuilder(); 
      HttpWebRequest clientRequest = (HttpWebRequest)WebRequest.Create(url); 
      HttpWebResponse response = (HttpWebResponse)clientRequest.GetResponse(); 
      string headers = response.Headers.ToString(); 
      string contentType = response.Headers.Get("content-type"); 
      var encoding = ASCIIEncoding.ASCII; 
      if (contentType.IndexOf("image") > -1) 
      { 
       using (BinaryReader stream = new BinaryReader(response.GetResponseStream())) 
       { 
        var bytes = new byte[1024]; 
        while (true) 
        { 
         var n = stream.Read(bytes, 0, bytes.Length); 
         if (n == 0) 
         { 
          break; 
         } 
         responseString.Append(bytes); 
        } 
        return "HTTP/1.1 200 \n" + headers + responseString.ToString(); 
       } 
      } 
      else 
      { 
       using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding)) 
       { 

        return "HTTP/1.1 200 \n" + headers + reader.ReadToEnd(); 
       } 
      } 
     catch 
     { 
      addToList("Request failed"); 
      return "Request failed"; 
     } 
    } 

如果可能的話我寧願保持HTTP響應繩子,讓我在現有的NetworkStream發送。

+0

只看你的代碼和文檔,我建議ASCII不是正確的編碼,因爲圖像可能包含正常的ASCII字符集以外的字符。請參閱:https://msdn.microsoft.com/en-us/library/ms404377(v=vs.110).aspx –

+0

ASCII編碼僅用於基於文本的請求,我沒有使用圖像。除非可能ASCII是默認的 –

+0

是否有一個原因,你正在閱讀流的方式,而不是使用Image.FromStream()?你能發佈你得到的錯誤嗎? –

回答

0

解決方案是將響應直接傳輸到客戶端,而不是先將其轉換爲字符串。標題在之前以字符串形式發送。