2014-05-13 113 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 

这样您就可以将收到的文件重命名为其原始名称。