【发布时间】:2017-04-11 20:05:45
【问题描述】:
所以我已经做了几天了,我遇到了一个问题。我正在尝试进行 ajax 调用,将字节 [] 发送到 c# 中的控制器。
var data = { FtpUpload: self.Upload(), Attachment: self.Attachment() };
Base.ServiceCall("/Home/Upload", "post", data, true, function (response) {...}
self.Attachment() 包含 'byte[]' 的属性。我使用它从按计划工作的文件中读取字节数组。
self.OnImageUpload = function (vm, evt) {
var file = evt.target.files[0];
var reader = new FileReader();
reader.onload = function () {
var attachment = {
...
Attachment: reader.result.split(',')[1]
};
self.Attachment(attachment);
}
reader.readAsDataURL(file);
};
当我使用 17mb 文件执行此操作时,它可以正常工作,但是当我使用 109mb 文件执行此操作时,它会抛出一个 500 错误,说明这一点。
[OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.]
System.Web.Util.HttpEncoder.UrlDecode(Byte[] bytes, Int32 offset, Int32 count, Encoding encoding) +76
System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +164
System.Web.HttpRequest.FillInFormCollection() +77
[HttpException (0x80004005): The URL-encoded form data is not valid.]
System.Web.HttpRequest.FillInFormCollection() +130
System.Web.HttpRequest.EnsureForm() +69
System.Web.HttpRequest.get_Form() +13
System.Web.HttpRequestWrapper.get_Form() +14
我已将适当的设置添加到我的 web.config 以允许像这样的更大文件。
<system.web>
<httpRuntime targetFramework="4.6" maxRequestLength="2147483647" executionTimeout="1600" requestLengthDiskThreshold="2147483647" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
</system.webServer>
我不知道还能做什么。
【问题讨论】:
-
由于您遇到内存不足异常,我怀疑这不是您的配置问题。您可以发布接收数据的网站方法吗?我怀疑问题就在那里。因为您收到错误 500,这意味着它发生在服务器上,因此引发此异常的不是您的 JavaScript。
-
如果你想要一个字节数组,你应该考虑使用
reader.readAsArrayBuffer()。readAsDataURL将对您的文件进行 base64 编码,这会大大增加数据的大小。 -
"如果你想要一个字节数组,你应该考虑使用 reader.readAsArrayBuffer()。"我试过了,但是字节数组在后端是空的。我试图将数组缓冲区传递给字节 []。我需要先把它转换成任何东西吗?
标签: javascript c# ajax asp.net-mvc