将文件从 MVC 发布到 WEB API

本文关键字:WEB API 文件 MVC | 更新日期: 2023-09-27 18:34:43

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

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

现在我正在考虑创建一个如下所示的上传文件请求:

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

并将文件作为字节数组传递,但这看起来非常低效。

将文件从 MVC 发布到 WEB API

我创建了一个示例,用于将文件从 MVC 控制器上传到 Web 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();
    }

网页接口控制器:

    [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);
        }
    }

有关在 Web API 中保存文件的详细信息,请参阅 Web API:文件上载

希望对某人有所帮助!

来自您的 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) {
            }
        });

并从您的 API 控制器

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