如何将文件发布到ASP.NET Web Api 2

Fuf*_*ffu 7 asp.net asp.net-web-api

我想将文件发布到我的webapi.这不是问题,但是:

  1. 希望使用JavaScript
  2. 必须同步接收和保存文件
  3. 我希望我的行动看起来像这样:

    public void Post(byte[] file)
    {
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

    要么:

    public void Post(Stream stream)
    {
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 我想从类似的代码发布文件(当然,现在它不起作用):

    <form id="postFile" enctype="multipart/form-data" method="post">
    
        <input type="file" name="file" />
    
        <button value="post" type="submit" form="postFile"  formmethod="post" formaction="<%= Url.RouteUrl("WebApi", new { @httpRoute = "" }) %>" />
    
    </form>
    
    Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激

vto*_*ola 13

最简单的例子就是这样的

[HttpPost]
[Route("")]
public async Task<HttpResponseMessage> Post()
{
    if (!Request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    var provider = new MultipartFormDataStreamProvider(HostingEnvironment.MapPath("~/App_Data"));

    var files = await Request.Content.ReadAsMultipartAsync(provider);

    // Do something with the files if required, like saving in the DB the paths or whatever
    await DoStuff(files);

    return Request.CreateResponse(HttpStatusCode.OK);;
}
Run Code Online (Sandbox Code Playgroud)

没有同步版本,ReadAsMultipartAsync所以你最好还是玩.

更新:

如果您使用的是IIS服务器托管,则可以尝试传统方式:

public HttpResponseMessage Post()
{
    var httpRequest = HttpContext.Current.Request;
    if (httpRequest.Files.Count > 0)
    {
        foreach (string fileName in httpRequest.Files.Keys)
        {
            var file = httpRequest.Files[fileName];
            var filePath = HttpContext.Current.Server.MapPath("~/" + file.FileName);
            file.SaveAs(filePath);
        }

        return Request.CreateResponse(HttpStatusCode.Created);
    }

    return Request.CreateResponse(HttpStatusCode.BadRequest);
}
Run Code Online (Sandbox Code Playgroud)