我有一个瘦 ASP.NET MVC 客户端和一个 WEB API 后端。我需要在 MVC 端接收 excel 文件并将其发送到 WEB API Controller 而不做任何更改。我怎样才能以最简单的方式实现它?
[HttpPost]
public ActionResult UploadExcelFile(HttpPostedFileBase file)
{
//call web api here
}
现在我正在考虑创建一个如下所示的 UploadFileRequest:
public class UploadFileRequest
{
public byte[] byteData { get; set; }
}
并将文件作为字节数组传递,但这看起来效率极低。
请您参考如下方法:
我创建了一个示例,用于将文件从 MVC Controller 上传到 Web Api Controller ,它运行良好
MVC Controller :
[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 Controller :
[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: File Upload
希望对某人有所帮助!
