使用asp文件上传器的Uplaod图像超过4 mb?
我正在使用一个asp文件上传器,通过它上传一个按钮点击图像。每当我上传超过4 mb的图像它崩溃。如果我在配置中为maxrequestlength定义一个大小然后如果我再次超过文件大小它崩溃。如果上传了大文件,是否可以限制用户并显示免责声明消息。 我的意图是让用户知道文件很大。
aspx页面
Image Upload <%----%> <%----%>
.cs页面事件。 protected void btnUpload_Click(object sender,EventArgs e){try {//hfCurrentId.Value =“work item id:”+ hfWorkItemID.Value; if(fileUploader.HasFile){if(fileUploader.PostedFile.ContentType.Contains(“image”)&& fileUploader.PostedFile.ContentLength <= 3145728){
if (ddlImageType.SelectedValue == "1") { Session["FileBytes"] = fileUploader.FileBytes; hfImage1Byte.Value = Convert.ToBase64String(fileUploader.FileBytes); imgPreview.ImageUrl = "~/Handlers/ImageHandler.ashx?workItemId=" + workItemId + "&imageTypeId=" + ddlImageType.SelectedValue; } else { Session["FileBytes2"] = fileUploader.FileBytes; hfImage2Byte.Value = Convert.ToBase64String(fileUploader.FileBytes); imgPreview2.ImageUrl = "~/Handlers/ImageHandler.ashx?workItemId=" + workItemId + "&imageTypeId=" + ddlImageType.SelectedValue; } } else { lblMessage.Text = Constants.ImageFileError; } } else { lblMessage.Text = Constants.FileError; } //lblHeader.Text = hfCurrentId.Value; //upPanel1.Update(); } catch (System.Exception ex) { //DisplayError(ex); Session["ExceptionDetails"] = ex; Response.Redirect(Constants.FIREErrorDetails); } }
在这里,我将大小限制在3145728并以客户端大小处理它
function validateFile() { var strFileName = document.getElementById('').value; var strExtName = strFileName.substring(strFileName.lastIndexOf('.')).toLowerCase(); var objFSO = new ActiveXObject("Scripting.FileSystemObject"); var e = objFSO.getFile(strFileName); var fileSize = e.size; //file size limit for 3mb if (fileSize > 3145728) { alert("Maximum size of uploaded file should be less than 3 MB."); return false; } else return true; }
有没有其他方法可以避免
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
我不能根据某些客户端问题使用ActiveXObject
假设您没有使用HTML5。 假设您没有按照Karl的建议使用自定义/第三方组件。
(1)您需要首先在IIS的web.config中限制上传大小:
(2)确保ASP.Net的httpRuntime中的值匹配:
(3)检查服务器端代码的大小是否超出并适当通知用户:
if (fileUpload.PostedFile.ContentLength > (YOUR_MAX_ALLOWED_SIZE - n)) { // where "n" is arbitrary number to intercept uploads before IIS kicks it // you display limit to users as (YOUR_MAX_ALLOWED_SIZE - n) // inform problem to the user here }
除非您使用HTML5 File API,否则无法在客户端进行检查。 因此,用户必须等到整个文件上传,然后才能最大化。 因此,请仔细设置您的YOUR_MAX_ALLOWED_SIZE。
更新 :
如您所见,如果尺寸超出限制,很难捕捉到。 有一些解决方法:
-
设置自定义错误:
-
在
system.webServer
部分中设置httpErrors
:
请参阅Marcus在此接受的答案: 在ASP.NET MVC中文件上载超过允许的大小时显示自定义错误页面
简短的回答是,你不能使用代码来捕获大量文件并通知用户,因为在你的任何代码执行之前检查IIS设置,因此为时已晚。
如果您想获得更好的用户体验,我建议您调查一些开源解决方案,如下所示:
-
自定义HTTP模块
NeatUpload是一个免费选项。
-
Silverlight / Flash选项
SWFUpload是一个免费选项。
-
异步分块选项
RadAsyncUpload – Telerik的ASP.NET AsyncUpload是一个付费选项,检查网站的价格。