簡體   English   中英

處理多個文件時,在將base64字符串轉換為字節數組時拋出了System.OutOfMemoryException

[英]System.OutOfMemoryException was thrown at converting base64 string to byte array while processing multiple files

我試圖通過異步XMLHTTPRequest發送批處理文件以及各種其他表單元素。 每個批次可以包含最大15 MB的文件大小。 可以有多個批次。

我正在讀取javascript中的文件並將它們轉換為base64字符串,然后嘗試接收控制器中的文件(使用for循環)並將它們轉換為字節數組。

string fileValue1 = form.GetValues("fileName1");
string fileValue2 = form.GetValues("fileName2");

文件值的格式如下,具體取決於附件的類型:

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkC...

使用下面的子字符串刪除','之前的內容,並在將其轉換為字節數組之前進行一些處理。

fileValue1 = fileValue1 .Substring(fileValue1 .IndexOf(',') + 1);

fileValue1 = fileValue1 .Trim().Replace(" ", "+");

fileValue1 = Convert.FromBase64String(fileValue1)

由於我通過多個批次發送文件(例如,如果有10個批次),將會有大約150到200 MB的文件試圖通過異步AJAX調用到達控制器。

發送時,我收到以下錯誤消息:

System.OutOfMemoryException was thrown at converting base64 string to byte array - occuring at replace statement.

我已經按照各種帖子進行了解決方法,但似乎沒有什么對我有用。 我試圖將web.config中的“httpRuntime maxRequestLength”和“maxAllowedContentLength”增加到4 GB以允許巨大的尺寸,但似乎沒有任何效果。

如果我刪除該行

 fileValue1 = fileValue1 .Substring(fileValue1 .IndexOf(',') + 1);

我收到以下錯誤:

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

通過多批次發送時,文件的最大大小可達500 MB。

我不確定,如何逐塊讀取此字符串文件,以確保在轉換為字節數組之前內存可用。 任何幫助將不勝感激。

可能你需要更改服務器的配置以接受更大的請求或更改請求到期之前的時間,因為當你有多個請求服務器想要參加所有和請求並且過程很慢然后請求到期而你沒有收到所有數據

這個鏈接可以幫助或其他

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM