使用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。

更新

如您所见,如果尺寸超出限制,很难捕捉到。 有一些解决方法:

  1. 设置自定义错误:

  2. system.webServer部分中设置httpErrors

请参阅Marcus在此接受的答案: 在ASP.NET MVC中文件上载超过允许的大小时显示自定义错误页面

简短的回答是,你不能使用代码来捕获大量文件并通知用户,因为在你的任何代码执行之前检查IIS设置,因此为时已晚。

如果您想获得更好的用户体验,我建议您调查一些开源解决方案,如下所示:

  1. 自定义HTTP模块

    NeatUpload是一个免费选项。

  2. Silverlight / Flash选项

    SWFUpload是一个免费选项。

  3. 异步分块选项

    RadAsyncUpload – Telerik的ASP.NET AsyncUpload是一个付费选项,检查网站的价格。