首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XMLHttpRequest ::ERR_CONNECTION_RESET同时上传大文件(2 Mo及更多)

XMLHttpRequest ::ERR_CONNECTION_RESET同时上传大文件(2 Mo及更多)
EN

Stack Overflow用户
提问于 2014-12-11 17:00:46
回答 2查看 8.1K关注 0票数 5

问题

我正在尝试使用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

Javascript

代码语言: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标记

代码语言:javascript
运行
复制
<asp:FileUpload ID="files" runat="server" multiple="true" />
<br />
<table id="selectedFiles">
</table>
<span id="progress"></span>

MyService.asmx

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
<!-- [...] -->
<system.web>
    <httpRuntime maxRequestLength="2097151" executionTimeout="180" /><!-- MAXIMUM DURING TESTING -->
    <!-- [...] -->
</system.web>
<!-- [...] -->
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-11 18:30:24

好吧我解决了..。

解决方案

如果这种情况发生在其他人身上,请确保在您的Context.Request.Files中至少访问一次WebService。

因为,在我的测试中,我只是:

代码语言:javascript
运行
复制
Public Function UploadFilesWithAJAX()
    Return "RETURN SOMETHING"
End Function

但这还不够。如果我只访问Context.Request.Files,比如:

代码语言:javascript
运行
复制
 Public Function UploadFilesWithAJAX()
    Dim files = Context.Request.Files '<---- Simply adding this... make it works :|
    Return "RETURN SOMETHING"
End Function

它起作用了。希望它能帮到别人。

顺便说一句,如果有人能解释我为什么要这么做。

票数 3
EN

Stack Overflow用户

发布于 2014-12-11 21:02:43

在您的web配置中,您定义了maxRequestLength="2097151“,它大约是2mb,因此,如果您试图上传超过2mb的文件,它最终将失败。

下面的示例配置(它最多允许2gb )

代码语言:javascript
运行
复制
<httpRuntime maxRequestLength="2048576000" executionTimeout="300" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27428375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档