我尝试使用XMLHttpRequest上传文件,它似乎只适用于小文件(例如大小不超过2MO)。到目前为止,我尝试了很多东西,并在帖子末尾显示了代码。但是,没有什么可做的;我一直收到::ERR_CONNECTION_RESET
错误。这不是代码问题,因为2MO文件正在正确卸载...我忘了什么?我知道这可能是IIS或web.config问题,但我可以通过谷歌搜索这个问题来指责它。
POST WEBSITEANDSERVICEURL / Service / MyService.asmx / UploadFilesWithAJAX net :: ERR_CONNECTION_RESET
- handleFileSelect
- x.event.dispatch
- v.handle
<script type="text/javascript">
$(function() {
$('#<%= files.ClientID %>').change(handleFileSelect);
});
function handleFileSelect(e) {
if (!e.target.files || !window.FileReader) return;
var fd = new FormData();
var file = document.getElementById("<%= files.ClientID %>");
for (var i = 0; i < file.files.length; i++) {
fd.append('_file', file.files[i]);
}
var xhr = new XMLHttpRequest();
xhr.open('POST', '<%= ResolveURL("~/Services/MyService.asmx/UploadFilesWithAJAX") %>', true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
};
xhr.upload.addEventListener("progress", updateProgress, false);
xhr.send(fd);
}
function updateProgress(oEvent) {
if (oEvent.lengthComputable) {
var percentComplete = oEvent.loaded / oEvent.total;
$("#progress").text(oEvent.loaded + " ON " + oEvent.total);
}
}
</script>
<asp:FileUpload ID="files" runat="server" multiple="true" />
<br />
<table id="selectedFiles">
</table>
<span id="progress"></span>
<ScriptService()> _
<ToolboxItem(False)> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
Public Class AJAXServices : Inherits WebService
<WebMethod(EnableSession:=True)> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Xml)> _
Public Function UploadFilesWithAJAX()
' Some code which work fine, I'm sure of it.
End Function
End Class
<!-- [...] -->
<system.web>
<httpRuntime maxRequestLength="2097151" executionTimeout="180" /><!-- MAXIMUM DURING TESTING -->
<!-- [...] -->
</system.web>
<!-- [...] -->
答案 0 :(得分:3)
好的,我解决了......
如果这种情况发生在其他人身上,请确保至少在您的WebService中访问Context.Request.Files
。
因为,在我的测试中,我只是:
Public Function UploadFilesWithAJAX()
Return "RETURN SOMETHING"
End Function
但这还不够......如果我只访问Context.Request.Files,如:
Public Function UploadFilesWithAJAX()
Dim files = Context.Request.Files '<---- Simply adding this... make it works :|
Return "RETURN SOMETHING"
End Function
有效。 希望它可以帮助别人。
顺便说一句,如果有人能够通过这样做来解释我为什么会这样做。
答案 1 :(得分:0)
在您的网络配置中,您定义了maxRequestLength =“2097151”,大约为2mb,因此如果您尝试上传超过2mb的文件,它最终会失败。
下面的示例配置(最多允许2gb)
<httpRuntime maxRequestLength="2048576000" executionTimeout="300" />