处理多个文件

时间:2017-06-29 04:27:23

标签: c# ajax asp.net-web-api memory-leaks out-of-memory

我试图通过异步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。

我不确定,如何逐块读取此字符串文件以确保在转换为字节数组之前内存可用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

可能你需要更改服务器的配置以接受更大的请求或更改请求到期之前的时间,因为当你有多个请求时服务器想要参加所有请求并且过程很慢然后请求到期而你不要#39; t接收所有数据

this链接可以提供帮助,或this其他