2016-02-15 67 views
0

我有一个瘦ASP.NET MVC客户端和一个WEB API后端。我需要在MVC端接收excel文件,并将其发送到WEB API控制器,而不做任何更改。我怎样才能以最简单的方式实现它?将文件从MVC发布到WEB API

[HttpPost] 
public ActionResult UploadExcelFile(HttpPostedFileBase file) 
{ 
    //call web api here 
} 

现在我想创建一个UploadFileRequest将看起来像这样的:

public class UploadFileRequest 
{ 
    public byte[] byteData { get; set; } 
} 

,并通过文件的字节数组,但是这看起来极其低效。

回答

0

从您的JS

var data = new FormData(); 
var file = $("#upload")[0]; // your input[type=file] 
data.append("file", file.files[0]); 

$.ajax({ 
      type: "POST", 
      url: url, 
      data: data, 
      cache: false, 
      contentType: false, 
      processData: false, 
      async: true, 
      success: function(data) { 
      } 
     }); 

从你apicontroller

呼叫HttpContext.Current.Request.Files[0] // here's your file

1

我创建了一个样本从MVC控制器将文件上传到网络API控制器,它的工作完美

MVC控制器:

[ActionName("FileUpload")] 
    [HttpPost] 
    public ActionResult FileUpload_Post() 
    { 
     if (Request.Files.Count > 0) 
     { 
      var file = Request.Files[0]; 

      using (HttpClient client = new HttpClient()) 
      { 
       using (var content = new MultipartFormDataContent()) 
       { 
        byte[] fileBytes = new byte[file.InputStream.Length + 1];       file.InputStream.Read(fileBytes, 0, fileBytes.Length); 
        var fileContent = new ByteArrayContent(fileBytes); 
        fileContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = file.FileName }; 
        content.Add(fileContent); 
        var result = client.PostAsync(requestUri, content).Result; 
        if (result.StatusCode == System.Net.HttpStatusCode.Created) 
        { 
         ViewBag.Message= "Created"; 
        } 
        else 
        { 
         ViewBag.Message= "Failed"; 
        } 
       } 
      } 
     } 
     return View(); 
    } 

网络API控制器:

[HttpPost] 
    public HttpResponseMessage Upload() 
    { 
     if(!Request.Content.IsMimeMultipartContent()) 
     { 
      throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
     } 
     if (System.Web.HttpContext.Current.Request.Files.Count > 0) 
     { 
      var file = System.Web.HttpContext.Current.Request.Files[0]; 
      .... 
      // save the file 
      .... 
      return new HttpResponseMessage(HttpStatusCode.Created); 
     } 
     else 
     { 
      return new HttpResponseMessage(HttpStatusCode.BadRequest); 
     } 
    } 

有关保存在网页API文件的详细信息,请参阅Web API: File Upload

希望帮助别人!

相关问题