2009-09-30 50 views
1

在C#中,而不是必須使用httpwebrequest從web下載文件,將其保存到文件的某處,然後使用POST將文件上傳到webservice作爲參數之一...我可以使用流文件作爲源使用網絡文件將文件上傳到Web API嗎?

我可以改爲以某種方式從httpwebresponse打開一個閱讀器流,然後將其流入http POST?任何代碼有人可以張貼來顯示如何?

換句話說,我試圖避免首先保存到磁盤。

感謝

回答

2

類似的東西應該做的伎倆:

HttpWebRequest downloadRequest = WebRequest.Create(downloadUri) as HttpWebRequest; 
using(HttpWebResponse downloadResponse = downloadRequest.GetResponse() as HttpWebResponse) 
{ 
    HttpWebRequest uploadRequest = new HttpWebRequest(uploadUri); 
    uploadRequest.Method = "POST"; 
    uploadRequest.ContentLength = downloadResponse.ContentLength; 
    using (Stream downloadStream = downloadResponse.GetResponseStream()) 
    using (Stream uploadStream = uploadRequest.GetRequestStream()) 
    { 
     byte[] buffer = new byte[4096]; 
     int totalBytes = 0; 
     while(totalBytes < downloadResponse.ContentLength) 
     { 
      int nBytes = downloadStream.Read(buffer, 0, buffer.Length); 
      uploadStream.Write(buffer, 0, nBytes); 
      totalBytes += nRead; 
     } 
    } 
    HttpWebResponse uploadResponse = uploadRequest.GetResponse() as HttpWebResponse; 
    uploadResponse.Close(); 
} 

(未測試的代碼)

+0

哇...我會嘗試一下,當我回到家裏,然後更新...非常感謝 – Greg 2009-09-30 23:37:10

+0

嘿托馬斯 - 回到這個 - 我注意到我有一個問題,如果我的目標是服務器不提供ContentLength(例如在downloadResponse.ContentLength)的頁面。我似乎得到「System.NotSupportedException:此流不支持查找操作..」。這裏的任何想法如何解決這個問題? – Greg 2009-12-08 07:13:46

+0

你在哪個指令中得到這個異常? – 2009-12-08 09:37:27

相關問題