gpt4 book ai didi

asp.net - 通过 Web Api 上传文件在第二次上传时失败

转载 作者:行者123 更新时间:2023-12-01 08:34:53 24 4
gpt4 key购买 nike

我正在使用 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>&lt;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 就失败了。

最佳答案

你不应该使用 void 方法。

由于多种原因,Void 和 async 不能很好地配合使用。

   public Task<HttpResponseMessage> Post()
{
var rootUrl = "c:/uploads";

if (Request.Content.IsMimeMultipartContent())
{
var streamProvider = new MultipartFormDataStreamProvider(rootUrl);
var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
throw new HttpResponseException(HttpStatusCode.InternalServerError);

//do stuff with files if you wish

return new HttpResponseMessage(HttpStatusCode.OK);
});
return task;
}

throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
}

关于asp.net - 通过 Web Api 上传文件在第二次上传时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12727893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com