我正在使用 Web Api 创建一种通过 Web api 上传文件的方法。我找到了几篇关于如何完成此操作的博客文章,并且代码都非常相似,其中一个关键的共同点是 Request.Content.ReadAsMultipartAsync() 调用。我遇到的问题是第一次上传工作正常,但随后 IIS 进入故障状态,后续上传失败。第一个 32Kb 进入,但随后退出。调试仅显示在 ASP.NET 框架中某处发生的空引用异常。
这是我的 ApiController 定义...
public class FileUploadController : ApiController
{
public void Post()
{
if (Request.Content.IsMimeMultipartContent())
{
var path = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(path);
var task = Request.Content.ReadAsMultipartAsync(provider);
task.ContinueWith(t =>
{
if (t.IsFaulted || t.IsCanceled)
throw new HttpResponseException(HttpStatusCode.InternalServerError);
});
}
else
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
}
}
}
另外,这是我发布的页面...
<!doctype html>
<head>
<title>File Upload Progress Demo #3</title>
</head>
<body>
<h1>File Upload Progress Demo #3</h1>
<code><input type="file" name="myfile[]"></code><br>
<form action="/api/fileupload" method="post" enctype="multipart/form-data">
<input type="file" name="myfile"><br>
<input type="submit" value="Upload File to Server">
</form>
<div class="progress">
<div class="bar"></div>
<div class="percent">0%</div>
</div>
<div id="status"></div>
</body>
上面的代码可以从https://github.com/JohnLivermore/FileUploadTest下载到默认的 WebApi 解决方案中。运行并导航到http://localhost:{port}/FormPost.html
。第一次上传成功(上传到 App_Data),但后续上传只上传前 32 Kb,然后失败。