所以我一直在這樣做了幾天,並且遇到了一個問題。我試圖做一個Ajax調用,發送一個字節[]到控制器在C#中。嘗試從js發送100mb字節數組到使用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的文件,它工作正常,但如果我這樣做了了109M的文件,它拋出一個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。 – Lorien
如果你想要一個字節數組,你應該考慮使用'reader.readAsArrayBuffer()'。 'readAsDataURL'將base64編碼你的文件,這可以大大增加數據的大小。 –
「如果你想要一個字節數組,你應該考慮使用reader.readAsArrayBuffer()。」我試過這個,但字節數組在後端作爲null來傳遞。我試圖將數組緩衝區傳遞給一個byte []。我需要先把它轉換成任何東西嗎? – NormTheThird