【问题标题】:Wrong message , File uploaded but still "Maximum request length exceeded"错误消息,文件已上传但仍然“超出最大请求长度”
【发布时间】:2015-07-03 09:08:32
【问题描述】:

我已经在 javascript 中编写了一个上传文件方法来上传大文件,它将文件放在 blob 中,然后再次在服务器端重新附加 blob,这样我就可以上传大文件,但是有一个问题......上传完成后我在服务器端接收文件(文件上传完全),它给了我这个Maximum request length exceeded

<!DOCTYPE HTML>
<html>
<head id="Head1" runat="server">
    <title>uploading file using jquery with generic handler ashx</title>
    <link id="Link2" rel="stylesheet" runat="server" media="screen" href="~/fileupload.css" />
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="http://malsup.github.com/jquery.form.js"></script>
    <%--<script src="JavaScript1.js" type="text/javascript"></script>--%>
    <script src="MyScript.js" type="text/javascript"></script>
</head>
<body>

    <form id="form1" runat="server" enctype="multipart/form-data">
        <div id="uploadFile">
            <div class="fileuploadDiv">
                <div class="status"></div>
                <input type="file" name="files[]" multiple="multiple" id="files" class="fileSelect" />
                <input type="submit" value="Upload" class="button" id="btnUpload" />
                <%--<div id="progressbar" class="progress"></div>--%>
                <div class="progress" id="progressbar">
                    <div class="bar" id="bar"></div>
                    <div class="percent" id="percent">0%</div>
                </div>
                <div id="messages"></div>
            </div>
        </div>
    </form>
</body>

MyScript.js

$(document).ready(function () {
    $("#btnUpload").click(function (evt) {
        var blobs = [];
        var fl = document.getElementById("files");
        var L = fl.files.length;
        var elem = document.getElementById("bar");
        var per = document.getElementById("percent");

        for (var i = 0; i < L ; i++) {
            var file = fl.files[i];
            var bytes_per_chunk = 3*1024*1024; //1048576
            var start = 0;
            var end = bytes_per_chunk;
            var size = file.size;
            var j = 1;
            while (start < size) {
                //push the fragments to an array
                blobs.push(file.slice(start, end));
                start = end;
                end = start + bytes_per_chunk;
            }
            while (blob = blobs.shift()) {
                var fileName = file.name;
                var fileType = file.type;
                var fileSize = file.size / 100;
                var rec = 0;
                rec = blob + rec;
                var xhr = new XMLHttpRequest();

                xhr.open('POST', 'Handler.ashx', false);

                xhr.onload = function () {
                    alert("in for");
                    elem.style.width = j + "%";
                    per.innerHTML = j + "%";
                    j++;
                    rec = 0;

                }

                xhr.setRequestHeader('X_FILE_NAME', fileName);
                xhr.setRequestHeader('Content-Type', fileType);
                xhr.send(blob);
            }
        }
    });
});

处理程序.ashx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;

namespace test
{
    public class Handler : IHttpHandler
    {
        int fileCount = 0;
        public static void AppendAllBytes(string path, byte[] bytes)
        {
            //argument-checking here.
            try
            {
                using (var stream = new FileStream(path, FileMode.Append))
                {
                    stream.Write(bytes, 0, bytes.Length);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void ProcessRequest(HttpContext context)
        {
            try
            {
                byte[] buffer = new byte[context.Request.ContentLength];
                context.Request.InputStream.Read(buffer, 0, context.Request.ContentLength);
                string fileName = context.Request.Headers.Get(11);
                AppendAllBytes(context.Server.MapPath("~/upload/" + fileName), buffer);  
            }
            catch (Exception)
            {
                throw;
            }              
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

【问题讨论】:

  • 检查您的 web.config 以获得最大请求长度,并增加它
  • 但问题是,我无权访问服务器配置文件,这是我在计算机上进行的测试,因此我使用了切片方法。实际上它正在成功上传文件,但也出现此错误
  • 当您说“它给了我超出了最大请求长度”时,“它”是什么?这个“消息”在哪里体现?
  • 我的意思是文件上传成功,但上传文件后,它也给出了这个错误。实际上它不应该给出错误,因为代码在上传时工作正常
  • “它”以什么方式给出这个错误 - 我想我不明白你在哪里看到错误

标签: javascript c# jquery ajax jquery-file-upload


【解决方案1】:

我终于解决了

问题是我将其更改为按钮的“提交”,因此在提交按钮后它也不会发送整个文件

我这样做了:

input type="button" value="Upload" class="button" id="btnUpload" />

而不是

input type="submit" value="Upload" class="button" id="btnUpload" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-22
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多