2013-05-07 168 views
0

我在將文件從網頁上傳到服務器時遇到問題。它適用於高達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

回答

0

代碼你得到的異常,因爲你正在嘗試比允許的應用程序分配更多的內存。 Web應用程序通常限制在300 MB左右。

解決方案是避免將整個文件讀入內存。這對於Web應用程序一次處理來說太大了。