2012-02-15 56 views
12

上傳REST客戶端文件的更好方法是什麼?使用HttpRequestMessage或Stream進行REST文件上傳?

從WCF的Web API文檔

[WebInvoke(UriTemplate = "thumbnail", Method = "POST")] 
public HttpResponseMessage UploadFile(HttpRequestMessage request) 
{ 

從多個論壇的帖子:
WCF REST File upload with additional parameters

[WebGet(UriTemplate="", Method ="POST"] 
public string UploadFile(Stream fileContents) 

我明白,第一種方法允許直接從一個普通的HTML表單POST文件。第二種方法在我發現的所有論壇帖子中似乎更常見。

你會推薦什麼?爲什麼? REST API應該可以從各種語言和平臺訪問。

對於HttpRequestMessage方法,如何上傳WCF HttpClient的文件?使用FormUrlEncodedMediaTypeFormatter)

回答

2

第一種方法「更接近金屬」,並且會更靈活,因爲您將處理http請求並自行構建響應。如果您只需接受來自客戶端的流,則第二種選擇從實現角度來看更簡單(在引擎蓋下,它執行與第一種方法相同的工作)

我沒有你最後一個問題的答案。

12

爲了測試HttpRequestMessage的方法,我也做了使用MVC以下內容:

public class TestingController : Controller 
{ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Upload() 
    { 
     var file = Request.Files[0]; 
     var filename = Request.Form["filename"]; 
     var uri = string.Format("http://yoururl/serviceRoute/{0}", filename); 
     var client = new HttpClient(); 
     client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("image/pjpeg")); 
     var content = new StreamContent(file.InputStream); 
     var response = client.PostAsync(uri, content); 
     ViewBag.ServerUri = uri; 
     ViewBag.StatusCode = response.Result.StatusCode.ToString(); 
     return View(); 
    } 

} 

索引視圖應該有一種形式,它是回發到上傳方法。然後您就可以使用HttpClient連接到您的REST服務。

+0

謝謝傑德,不幸的是我只能選擇一個正確的答案,我已經給了JCaffeine。但做了一個投票。 – Remy 2012-02-21 08:24:51

+0

雷米,你不用擔心。很高興它幫助你。 – Jed 2012-02-21 22:45:46