上传大型(2个Mo& More)文件时的XMLHttpRequest :: ERR_CONNECTION_RESET

时间:2014-12-11 17:00:47

标签: javascript asp.net vb.net xmlhttprequest asmx

问题

我尝试使用XMLHttpRequest上传文件,它似乎只适用于小文件(例如大小不超过2MO)。到目前为止,我尝试了很多东西,并在帖子末尾显示了代码。但是,没有什么可做的;我一直收到::ERR_CONNECTION_RESET错误。这不是代码问题,因为2MO文件正在正确卸载...我忘了什么?我知道这可能是IIS或web.config问题,但我可以通过谷歌搜索这个问题来指责它。

Chrome

给出的错误
  

POST WEBSITEANDSERVICEURL / Service / MyService.asmx / UploadFilesWithAJAX net :: ERR_CONNECTION_RESET

     
      
  • handleFileSelect
  •   
  • x.event.dispatch
  •   
  • v.handle
  •   

的Javascript

<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>

HTML标记

<asp:FileUpload ID="files" runat="server" multiple="true" />
<br />
<table id="selectedFiles">
</table>
<span id="progress"></span>

MyService.asmx

<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

的Web.config

<!-- [...] -->
<system.web>
    <httpRuntime maxRequestLength="2097151" executionTimeout="180" /><!-- MAXIMUM DURING TESTING -->
    <!-- [...] -->
</system.web>
<!-- [...] -->

2 个答案:

答案 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" />