所以我已经在这几天了,我遇到了一个问题。我试图进行ajax调用,在c#中向控制器发送一个byte []。
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>
我不知道还能做什么。
答案 0 :(得分:0)
基于堆栈跟踪,您的呼叫在HttpEncoder.UrlDecode
内失败,这只有在您将图像作为application/x-www-form-urlencoded
发送时才有可能,当您处理重二进制时,这可能是也可能不是最佳选择数据
无论您选择使用哪种内容类型,都必须使用HttpPostedFileBase
参数重新实施您的帖子操作,该参数为您提供InputStream.Read
方法,而不是期望byte[]
来自请求表格,见下文。
[HttpPost]
public JsonResult Upload(HttpPostedFileBase uploadedFile)
...
byte[] fileByteArray = new byte[uploadedFile.ContentLength];
uploadedFile.InputStream.Read(fileByteArray, 0, uploadedFile.ContentLength);
...
您可以在示例中看到action参数必须是HttpPostedFileBase
才能流式传输文件,而不是作为整个二进制数据数组发送/接收。
看看下面的以下项目 https://www.codeproject.com/Articles/1021004/Upload-File-Using-Ajax-And-HTML-in-MVC