2016-12-19 10 views
2

私は次のようにファイルをアップロードするためにASP.NETウェブAPI 2.2を使用しています:Request.Content.ReadAsMultipartAsync()とのOutOfMemory例外

[HttpPost] 
public async Task<IHttpActionResult> Post() 
{ 
    /* read the content */ 
    var contentTypeHeader = Request.Content.Headers.ContentType; 
    var contentLength = Request.Content.Headers.ContentLength; 

    /* Here I get the exception if the file is > 60/70 MB */ 
    var filesProvider = await Request.Content.ReadAsMultipartAsync(); 
    var fileContents = filesProvider.Contents.FirstOrDefault(); 
    var headers = fileContents.Headers; 
    Stream fileStream = await fileContents.ReadAsStreamAsync(); 

    // ... code not related to this question 
} 

私は順番に、次のようにすでにセットアップweb.configファイルを持っています

<system.web> 
    <httpRuntime targetFramework="4.5" maxRequestLength="1048576" /> 
    </system.web> 

そして

<system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="1073741824" /> 
     </requestFiltering> 
    </security> 
    </system.webServer> 

をしかし、私はまだ、この例外を取得:データの1ギガバイトまでのファイルを受け入れます。例外の構造は次のとおりです。

An error occurred System.IO.IOException: Error writing MIME multipart body part to output stream. ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown. 
↵ at System.IO.MemoryStream.set_Capacity(Int32 value) 
↵ at System.IO.MemoryStream.EnsureCapacity(Int32 value) 
↵ at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
↵ at System.IO.MemoryStream.WriteAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken) 

したがって、.NET例外のように見えますが、私のコードに関連していません。しかし、マルチファイルを使って大きなファイルをアップロードするにはどうすればいいですか?

答えて

0

画像ファイルが最初にアップロードされる仮想ディレクトリ(以下の例では「〜/ uploads」ディレクトリ)が物理的に存在していることを確認してください。

string uploadPath = HttpContext.Current.Server.MapPath("~/uploads"); 

MyStreamProvider streamProvider = new MyStreamProvider(uploadPath); 
関連する問題