2014-05-13 89 views
0

我遇到了一個令我非常沮喪的問題,我無法解決這個問題。我的團隊已經在C#中組裝了一個小型解決方案,該解決方案應該向API發送一個文件。文件正在通過HTTP發送請求發送。訪問http請求中的文件

解決方案由發送文件的服務和接收它的API組成。當服務和API都在同一臺計算機上時,它可以很好地工作,但是當在服務器上部署API時,它無法接收文件。接收代碼很簡單:收到

public HttpResponseMessage Post() 
    { 
    httpResponseMessage result = null; 
    var httpRequest = HttpContext.Current.Request; 
    //do sth with the file set response 
    return response; 
    } 

請求,但問題是,當我訪問

httpRequest.Files 

它是空的。正如微軟文檔所要求的,這應該用multipart/form-data類型的文件自動填充。當我打電話

httpRequest.ContentLength 

它到底是什麼被送到和

httpRequest.ContentType 

的multipart/form-data的;

因此收到數據但API無法識別文件。有沒有什麼辦法讓API識別這些文件,如果沒有的話,是否有任何手動的方式來解析響應正文中的文件。

+1

確實如此,感謝我一直在尋找相當一段時間的答案,而且我還沒有偶然發現過。 –

+0

請嘗試使用此命令獲取文件:'HttpContext.Current.Request.InputStream' –

回答

0

從克里斯特爾斯的一些幫助後,我設法解決馬問題。 Post方法現在看起來是這樣的:

public async Task<HttpResponseMessage> Post() 
{ 
    HttpResponseMessage result = null; 
    if (Request.Content.IsMimeMultipartContent()) 
     { 
      try 
      { 
       var provider = new MultipartFormDataStreamProvider(fileManager.TemporaryFilePath); 
       await Request.Content.ReadAsMultipartAsync(provider); 
         foreach (MultipartFileData file in provider.FileData) 
         { 
          logger.Info(string.Format("Uploaded file: {0}\n on path {1}", file.Headers.ContentDisposition.FileName, file.LocalFileName)); 
          //do sth with the file 
         } 
       //Do sth else 
      } 
     } 
} 

而且不是文件你這樣不保存在其原來的名字,而是在沒有文件擴展名隨機caracters名稱:

file.LocalFileName 

源文件名可用於以下屬性:

file.Headers.ContentDisposition.FileName 

這樣您就可以將收到的文件重命名爲其原始名稱。