2012-05-25 52 views

回答

4

你的簡短問題沒有一個簡短的答案恐怕。

ASP.NET Web API公開了HTTP的奇蹟,而ASP.NET MVC抽象了它的一部分 - 在本例中爲HttpPostedFile。

所以有點背景的:其中一個文件涉及通常有multipart表單數據內容

HTTP職位。這意味着您正在混合不同類型的內容類型:您的常規表單數據將使用formurlencoded發送,而文件將發送給application/octent-stream。

所以在網頁API,所有你需要做的就是

var contents = message.Content.ReadAsMultipartAsync(); // message is HttpRequestMessage 

其中的內容將包含您的文件。

4

退房的great article從亨裏克尼爾森發佈多的內容(即在張貼文件形式)

UPDATE:添加簡單的代碼用於控制器接收文件,而無需多內容

如果你只需要你的控制器接收文件(即沒有多部分內容),你可以做類似上面的事情。該請求只包含文件二進制文件,文件名在URL中傳遞。

public Task<HttpResponseMessage> Post([FromUri]string filename) 
{ 
    Guid uploadedFile = Guid.NewGuid(); 
    Task<HttpResponseMessage> task = Request.Content.ReadAsStreamAsync().ContinueWith<HttpResponseMessage>(t => 
     { 
      if (t.IsFaulted || t.IsCanceled) 
       throw new HttpResponseException(HttpStatusCode.InternalServerError); 

      try 
      { 
       using (Stream stream = t.Result) 
       { 
        //TODO: Write the stream to file system/db as you need 
       } 
      } 
      catch (Exception e) 
      { 
       Object o = e; 
       return Request.CreateResponse(HttpStatusCode.InternalServerError, e.GetBaseException().Message); 
      } 

      return Request.CreateResponse(HttpStatusCode.Created, uploadedFile.ToString()); 
     }); 


    return task; 
} 
+0

請做! :) Thnx! – StijnSpijker

+1

@StijnSpijker - 完成。回答更新了示例代碼。 –

相關問題