【发布时间】: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