2012-10-19 69 views
1

我想將Stream(包含圖像)的內容複製到一個StreamWriter(我正在寫一個webrequest),到目前爲止我無法做到這一點。C#如何將流複製到Streamwriter中

我試過imageStream.CopyTo(streamWriter);但是沒有工作,因爲它只能將它複製到另一個Stream而不是StreamWriter。

我希望有人能幫助我!

編輯:CODE ADDED

request.BeginGetRequestStream((requestResult => 
{ 
    Stream stream = request.EndGetRequestStream(requestResult); 
    using (StreamWriter streamWriter = new StreamWriter(stream)) 
    { 
     streamWriter.WriteLine(boundary); 
     streamWriter.WriteLine("Content-Disposition: form-data; name=\"json\""); 
     streamWriter.WriteLine("Content-Type: text/plain; charset=utf-8"); 
     streamWriter.WriteLine("Content-Transfer-Encoding: 8bit"); 

     streamWriter.WriteLine(json); 

     streamWriter.WriteLine(boundary); 
     streamWriter.WriteLine("Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\""); 
     streamWriter.WriteLine("Content-Type: application/octet-stream"); 
     streamWriter.WriteLine("Content-Transfer-Encoding: binary"); 
     streamWriter.WriteLine(""); 

     streamWriter.Flush(); 

     image.CopyTo(streamWriter.BaseStream); 
     // image.CopyTo(stream); // also not working 

     streamWriter.WriteLine(""); 
     streamWriter.WriteLine(boundary); 

     streamWriter.Close(); 
    } 

    ExecuteRequest(this, request); 

}), request); 
+0

你的例子說「requestStream」,你想確保你寫入響應流。 –

+5

您可以使用* imageStream.CopyTo(requestStream.BaseStream); * – decyclone

+0

@decyclone似乎不起作用,雖然它運行良好,但不會複製數據。我將用添加的代碼編輯我的問題。 –

回答

1

日Thnx到@decyclone我不得不使用streamWriter.BaseStream和重要的也是這個否則會以錯誤的順序寫入前使用Stream.Flush()。

 request.BeginGetRequestStream((requestResult => 
     { 
      using (StreamWriter streamWriter = new StreamWriter(request.EndGetRequestStream(requestResult))) 
      { 
       streamWriter.WriteLine(boundary); 
       streamWriter.WriteLine("Content-Disposition: form-data; name=\"json\""); 
       streamWriter.WriteLine("Content-Type: text/plain; charset=utf-8"); 
       streamWriter.WriteLine("Content-Transfer-Encoding: 8bit"); 

       streamWriter.WriteLine(json); 

       streamWriter.WriteLine(boundary); 
       streamWriter.WriteLine("Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\""); 
       streamWriter.WriteLine("Content-Type: application/octet-stream"); 
       streamWriter.WriteLine("Content-Transfer-Encoding: binary"); 
       streamWriter.WriteLine(""); 

       streamWriter.Flush(); 

       streamWriter.CopyTo(stream.BaseStream); 

       streamWriter.WriteLine(""); 
       streamWriter.WriteLine(boundary); 

       streamWriter.Close(); 
      } 

      ExecuteRequest(this, request); 

     }), request);