2013-11-23 65 views
1

我想在我的MVC ApiController中創建一個POST方法來接收並通過WebClient.UploadFile提交名稱文件。我已經搜索了一段時間,並沒有找到任何使用ApiController的完整樣本。我發現很多使用MVC控制器使用的相同Request對象。這些全部使用Request.Files集合來獲取文件流。但是,在ApiController公開的Request對象上找不到相同的屬性。使用MVC ApiController接收通過WebClient.UploadFile上傳的文件

以下是我的客戶端控制檯應用程序和服務器站點MVC ApiController的代碼片段。

客戶端代碼:

private void executePost(string url, string filename, params KeyValuePair<string, string>[] parms) 
{ 
    WebClient client = new WebClient(); 
    parms.ToList().ForEach(k => client.QueryString.Add(k.Key, k.Value)); 
    client.UploadFile(url, "POST", filename); 
} 

和僞服務器端ApiController方法:

public async Task<HttpResponseMessage> UploadFile(string p1, string p2, string p3) 
{ 
    if (Request.Content.IsMimeMultipartContent()) 
    { 
     var provider = new MultipartFileStreamProvider("/myroot/files"); 
     await Request.Content.ReadAsMultipartAsync(provider) 
      .ContinueWith(r => 
      { 
       if (r.IsFaulted || r.IsCanceled) 
        throw new HttpResponseException(HttpStatusCode.InternalServerError); 
      }); 
     return Request.CreateResponse(HttpStatusCode.OK); 
    } 
} 

我如何去命名是要寫入的文件。

感謝, 吉姆

+0

你上傳一個文件?您的客戶端代碼是否發送多部分請求? –

回答

1

檢查this StackOverflow上的問題。它爲Web API 1和Web API 2

這是如何保存接收到的文件答案:

FileInfo fileInfo = new FileInfo(provider.FileData.First().LocalFileName); 
File.Move(fileInfo.FullName, "/path/to/destination");