2017-02-13 48 views
3

在我的ASP.NET MVC项目中,我试图从Controller action方法将图像发布到API控制器方法。计划是利用此API将其他客户端用于上传图片。将MultipartFormDataContent从Controller Action方法发布到WebApi Post方法

我能够成功地从Controller Action方法中点击API Post方法,但无法传递图像对象。

这里是我的HomeController.csUpload操作方法

[HttpPost] 
public async Task<ActionResult> Upload(FormCollection formCollection) 
{ 
    var baseUri = "http://localhost/api/Process"; 

    HttpPostedFileBase file = Request?.Files[0]; 

    if (file == null || (file.ContentLength <= 0) || string.IsNullOrEmpty(file.FileName)) 
     return new EmptyResult(); 

    string fileName = file.FileName; 
    byte[] fileBytes = new byte[file.ContentLength]; 

    HttpContent stringContent = new StringContent(fileName); 
    HttpContent fileStreamContent = new StreamContent(file.InputStream); 
    HttpContent bytesContent = new ByteArrayContent(fileBytes); 

    using (var formDataContent = new MultipartFormDataContent()) 
    { 
     formDataContent.Add(stringContent, "fileName", fileName); 
     formDataContent.Add(fileStreamContent, "inputStream", fileName); 
     formDataContent.Add(bytesContent, "fileBytes", fileName); 
     using (var httpClient = new HttpClient()) 
     { 
      formDataContent.Headers.ContentType = 
       MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded"); 

      var response = await httpClient.PostAsync(baseUri, formDataContent); 
      var content = await response.Content.ReadAsStringAsync(); 
      //Handle the response 
     } 
    } 
    return View("Result"); 
} 

在从ApiController继承我的过程控制,我有以下的邮政法

[HttpPost] 
public async Task<string> Post([FromBody]MultipartFormDataContent formDataContent) 
{ 
    Task<string> imageContent = Request.Content.ReadAsStringAsync(); 
    string body = imageContent.Result; 
    ImageResponse imageResponse = null; 
    //................. 
    //................. 
    return someValue 
} 

这里参数formDataContent总是空和Request.Content.ReadAsStringAsync()是空

+0

你尝试'Request.Content.ReadAsMultipartAsync' ? – Jag

回答

1

尝试从控制器这样

//...other code removed for brevity 

using (var form = new MultipartFormDataContent()) { 

    var stringContent = new StringContent("fileToUpload"); 
    form.Add(stringContent, "fileToUpload"); 

    var streamContent = new StreamContent(file.InputStream); 
    streamContent.Headers.ContentType = MediaTypeHeaderValue.Parse(file.ContentType); 
    streamContent.Headers.ContentLength = file.ContentLength; 
    streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { 
     Name = "fileToUpload", 
     FileName = file.FileName 
    }; 
    form.Add(streamContent); 

    using (var httpClient = new HttpClient()) { 

     var response = await httpClient.PostAsync(baseUri, form); 

     //...other code removed for brevity 
    } 
} 

然后通过提取发送的信息处理它在ApiController ...

[HttpPost] 
public async Task<IHttpActionResult> Post() { 
    var content = Request.Content; 
    //get file name from content disposition 
    var fileName = content.Headers.ContentDisposition.FileName; 
    //Get file stream from the request content 
    var fileStream = await content.ReadAsStreamAsync(); 

    //...other code removed for brevity 

    return Ok(); 
} 

参考这样的回答:Upload image using HttpClient

+0

httpContent.Headers.ContentDisposition为null – HaBo

+0

只是做了这个httpContent.Headers.ContentDisposition?.FileName ?? “image.jpg的”;休息是工作感谢 – HaBo

相关问题