使用fileStream时出现内存异常

问题描述:

我在将文件从网页上传到服务器时遇到问题。它适用于高达200 MB的文件,但开始抛出内存异常。 你能帮我 我已经粘贴下面使用fileStream时出现内存异常

private void UploadToServer(HttpPostedFile oHttpPostedFile) 
    { 
     string CalCheckSum = string.Empty; 
     try 
     { 
      string FileName = getFileName(oHttpPostedFile.FileName.Trim()); 
      if (File.Exists(Server.MapPath("Upload") + "\\" + System.IO.Path.GetFileName(FileName))) 
      { 
       File.Delete(Server.MapPath("Upload") + "\\" + System.IO.Path.GetFileName(FileName)); 
      } 
      string serverFilePath = Server.MapPath("Upload") + "\\" + System.IO.Path.GetFileName(FileName); 
      FileStream fs = new FileStream(serverFilePath, FileMode.CreateNew); 
      string strFileFormName = serverFilePath; 
      // Uri oUri = new Uri(strUrl); 



      // DFB: Upload goes into stream 
      Stream myStream = oHttpPostedFile.InputStream; 
      string _name = oHttpPostedFile.FileName; 
      string _contentType = oHttpPostedFile.ContentType; 
      // DFB: Create buffer for stream 
      Byte[] myBuffer; 
      myBuffer = new byte[10240]; 
      if (myStream.Length == 0) 
      { 
       //Zero Bytes file Can not be processed 
       CalCheckSum = string.Empty; 
       return; 
      } 

      else if (myStream.Length > 10240) 
       myBuffer = new byte[10240]; 
      else 
       myBuffer = new byte[myStream.Length]; 
      StringBuilder filecontent = new StringBuilder(); 
      int fileLength = (int)myStream.Length; 
      int length = (int)myStream.Length/myBuffer.Length + 1; 
      int lastPacketLength = (int)myStream.Length % 10240; 
      int count = 1; 
      while (myStream.Read(myBuffer, 0, myBuffer.Length) > 0) 
      { 
       if (count == length) 
        fs.Write(myBuffer, 0, lastPacketLength); 
       else 
        fs.Write(myBuffer, 0, myBuffer.Length); 
       count++; 
      } 
      fs.Close(); 
      fs.Dispose(); 
      myStream.Dispose(); 
      myBuffer = null; 
      myStream = null; 
      FileStream fileStream = File.OpenRead(serverFilePath); 
      byte[] pbytCombinedArrays = new byte[fileLength]; 
      int numBytesToRead = fileLength; 
      int numBytesRead = 0; 
      while (numBytesToRead > 0) 
      { 
       // Read may return anything from 0 to numBytesToRead. 
       int n = fileStream.Read(pbytCombinedArrays, numBytesRead, numBytesToRead); 
       // Break when the end of the file is reached. 
       if (n == 0) 
        break; 
       numBytesRead += n; 
       numBytesToRead -= n; 
      } 
      fileStream.Dispose(); 
      fileStream.Close(); 
} 
+0

你从哪里得到例外?在'新的字节[fileLength]'? – Guffa 2013-05-07 11:58:54

+0

感谢您的快速响应。是的,我正在同一个地方。 FileStream fileStream = File.OpenRead(serverFilePath); byte [] pbytCombinedArrays = new byte [fileLength]; – TheDumbCoder 2013-05-07 12:15:08

+0

您是否需要将所有数据读入数组?在你展示的代码中,你不用任何东西。 (此外,您可以使用'byte [] pbytCombinedArrays = File.ReadAllBytes(serverFilePath);'而不是代码的最后部分。) – Guffa 2013-05-07 12:23:24

代码你得到的异常,因为你正在尝试比允许的应用程序分配更多的内存。 Web应用程序通常限制在300 MB左右。

解决方案是避免将整个文件读入内存。这对于Web应用程序一次处理来说太大了。