我试图通过异步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.
我已经按照各种帖子进行了解决方法,但似乎没有什么对我有用。我试图增加" httpRuntime maxRequestLength"和" maxAllowedContentLength"在web.config中为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。
我不确定,如何逐块读取此字符串文件以确保在转换为字节数组之前内存可用。任何帮助将不胜感激。