我正在使用此代码处理文件上传到网络API:
[HttpPost]
public async Task<IHttpActionResult> Post(string provider)
{
if (!Request.Content.IsMimeMultipartContent())
throw new Exception();
var streamProvider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(streamProvider); // FAILS HERE
foreach (var file in streamProvider.Contents)
{
var imageFilename = file.Headers.ContentDisposition.FileName.Trim('\"');
var imageStream = await file.ReadAsStreamAsync();
}
}
但它在此处引发错误:await Request.Content.ReadAsMultipartAsync(streamProvider);
错误是:读取MIME多部分正文部分时出错。 内部异常是:
{"Cannot access a disposed object."}
关于为什么会出现此错误的任何想法?
答案 0 :(得分:8)
我遇到了类似的问题,但提供的解决方案对我不起作用,所以这是我的:你上传的文件与IIS的安全限制不符。
http://forums.asp.net/t/2062896.aspx?Error+reading+MIME+multipart+body+part+when+upload+image
<system.web>
<httpRuntime maxRequestLength="30000000" /> <!-- if you forget this one it does not work -->
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="30000000" />
</requestFiltering>
</security>
</system.webServer>
答案 1 :(得分:3)
你试过这个吗?
[HttpPost]
public async Task<IHttpActionResult> Post(string provider)
{
if (!Request.Content.IsMimeMultipartContent())
throw new Exception();
var streamProvider = await Request.Content.ReadAsMultipartAsync(); // HERE
foreach (var file in streamProvider.Contents)
{
var imageFilename = file.Headers.ContentDisposition.FileName.Trim('\"');
var imageStream = await file.ReadAsStreamAsync();
}
}
它看起来应该像这样调用。
答案 2 :(得分:3)
我有同样的例外,但原因不同。我的Post方法的返回类型为void。一旦我将返回类型更改为Task<[T]>
,在我的情况下键入字符串,它就开始工作了。
答案 3 :(得分:-1)
您是否有存储上传文件的路径。像这样:
var streamProvider = new MultipartMemoryStreamProvider(@"C:\Uploads");