web api 2文件上传错误

时间:2014-06-05 16:26:49

标签: .net asp.net-mvc asp.net-web-api

我正在使用此代码处理文件上传到网络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."}

关于为什么会出现此错误的任何想法?

4 个答案:

答案 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");