我正在使用一个asp文件上传器,通过它我单击按钮上传图像。每当我将图像上传到4 mb以上时,它就会崩溃。如果我在配置中为maxrequestlength定义了大小
然后,如果我再次超过文件大小,它就会崩溃。如果上载了一个巨大的文件,是否可能限制用户并显示免责声明消息。我的目的是让用户知道该文件很大。
aspx页面
<tr>
<td align="center" class="title" colspan="2">
Image Upload
</td>
</tr>
<tr>
<td align="center" colspan="2">
<asp:Label ID="lblImageDisclaimer" runat="server" Text="Please upload an image file less than 3MB in size"
Font-Bold="true" ForeColor="Highlight"></asp:Label>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<asp:DropDownList ID="ddlImageType" runat="server" AutoPostBack="false" OnSelectedIndexChanged="ddlImageType_SelectedIndexChanged">
</asp:DropDownList>
</td>
</tr>
<tr>
<td align="center" colspan="2" id="tdUpload" runat="server">
<asp:Label ID="lblImage1" runat="server" Text="Upload images : " Font-Bold="true"></asp:Label>
<asp:FileUpload ID="fileUploader" runat="server" /><asp:Button ID="btnUpload" CssClass="button"
runat="server" Text="Upload" OnClick="btnUpload_Click" OnClientClick="javascript:return validateFile();" />
<asp:Label ID="lblMessage" runat="server" Text="" CssClass="errorText"></asp:Label>
</td>
</tr>
<tr>
<td id="Td2" runat="server" align="center" colspan="1">
<asp:Label ID="Label1" runat="server" Text="SCREENSHOT 1" Font-Bold="true"></asp:Label>
</td>
<td id="Td3" runat="server" align="center" colspan="1">
<asp:Label ID="Label2" runat="server" Text="SCREENSHOT 2" Font-Bold="true"></asp:Label>
</td>
</tr>
<tr>
<td id="imgHolder" runat="server" align="center" colspan="1">
<div style="border: SOLID 1px BLACK; width: 575px; height: 250px; overflow: auto;">
<%--<asp:Image ID="imgPreview" runat="server" ImageUrl="~/FIRE/ImageHandler.ashx?id=1&imageNo=2" />--%>
<asp:Image ID="imgPreview" runat="server" />
</div>
</td>
<td id="imgHolder2" runat="server" align="center" colspan="1">
<div style="border: SOLID 1px BLACK; width: 575px; height: 250px; overflow: auto;">
<%--<asp:Image ID="imgPreview" runat="server" ImageUrl="~/FIRE/ImageHandler.ashx?id=1&imageNo=2" />--%>
<asp:Image ID="imgPreview2" runat="server" />
</div>
</td>
</tr>
<tr>
<td id="tdDelete1" align="left" style="width: 100%; padding-left: 15px;" colspan="1">
<asp:Button ID="btnDelete1" runat="server" Text="Delete" CssClass="button" OnClick="btnDelete_Click"
ToolTip="Click to Delete" OnClientClick="javascript:return confirm('Are you sure you want to delete this image?');" />
</td>
<td id="tdDelete2" align="left" style="width: 100%" colspan="1">
<asp:Button ID="btnDelete2" runat="server" Text="Delete" CssClass="button" OnClick="btnDelete_Click"
ToolTip="Click to Delete" OnClientClick="javascript:return confirm('Are you sure you want to delete this image?');" />
</td>
</tr>
.cs页面事件。
受保护的无效btnUpload_Click(对象发送者,EventArgs e)
{
尝试
{
//hfCurrentId.Value =“工作项目ID:” + hfWorkItemID.Value;
如果(fileUploader.HasFile)
{
如果(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('<%=fileUploader.ClientID %>').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)您首先需要在web.config中为IIS限制上传大小:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="YOUR_MAX_ALLOWED_SIZE IN BYTES"/>
</requestFiltering>
</security>
</system.webServer>
(2)确保在ASP.Net的httpRuntime中这些值匹配:
<httpRuntime executionTimeout="SECONDS" maxRequestLength="YOUR_MAX_ALLOWED_SIZE IN KB"/>
(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。
更新:
如您所见,如果大小超出限制,将很难捕获。有一些解决方法:
设置自定义错误:
在httpErrors
部分中设置system.webServer
:
请在此处查看Marcus接受的答案:Display custom error page when file upload exceeds allowed size in ASP.NET MVC
Div单击与单选按钮相同吗? - php有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date…
与Mootools Scriptmanager Ajax Asp.net发生冲突? - c#我正在尝试不同的方法来使这项工作成功,但是没有成功。我正在尝试将mootools与asp.net应用程序集成。我只想用它为我的网站添加一些效果。我也使用更新面板,scriptmanager,因为不希望有完整的回发。在控制台上引发错误TypeError:clientID.startsWith不是函数,并且在进行更新时brwoser reset...。这是整个代…
将python scikit学习模型导出到pmml - python我想将python scikit-learn模型导出到PMML。哪个python软件包最合适?我阅读了有关Augustus的内容,但是我无法使用scikit-learn模型找到任何示例。 python大神给出的解决方案 SkLearn2PMML是 JPMML-SkLearn命令行应用程序周围的薄包装。有关受支持的Scikit-Learn Estimator和…
如何使用PHP从动态输入字段捕获数组值? - javascript我正在编写一个在线时间跟踪网页,允许用户将学习时间输入该系统。用户将首先输入名称,然后根据日期输入学习时间。一天中可能会有多个学习时间。以下是我第一页的编码,<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"…
SOAPFaultException部署在Tomcat上时,但在GlassFish中工作正常 - java朋友们,我一直在尝试很多,阅读了很多论坛,但无法理解为什么出现此问题。我使用契约优先方法创建了一个Jax-WS WebService。创建WSDL和XSD,然后使用wsimport工具生成其余工件,为SEI提供实现。将WebService应用程序部署到Eclipse Helios中的GlassFish(Glassfish适配器和Eclipse中安装的插件)。…