今天在修改公司前辈代码,框架是基于C#,ASP.NET技术,期间使用到图片拍照上传功能时,在前台预览图片后,表单提交到后台处理,但是后台获取不到图片,百思不得其解。下面我们一起来看一看:
1.前端代码
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body class="body_b">
<form id="form1" runat="server" >
<div class="block_tb0">
<div class="login_form">
<!--拍摄人脸照片 -->
<div class="upload">
<p class="part_title">拍照上传</p>
<p class="pic">
<input type="file" name="file" accept="image/*" onchange="buChange(this)" id="personImg" capture="camera"/>
<img alt="" id="imgHead"/>
</p>
</div>
<div class="radio">
<label>
<input id="cbOk" type="checkbox" name="cbOk" onclick="cbCheck();" runat="server"/>
我已阅读并同意</label><a href="javascript:DisplayLayer01()">《用户注册协议》</a>
</div>
<asp:HiddenField ID="HiddenOp" runat="server" />
<div id="ButtonbtnReg1" class="public_button">
<asp:Button ID="btnReg" runat="server" Text="注册" OnClick="btnReg_Click" ClientIDMode="Static" class="disabled"/>
</div>
</div>
</div>
</form>
</body>
</html>
2.后台处理
protected void btnReg_Click(object sender, EventArgs e)
{
System.Web.HttpFileCollection file = System.Web.HttpContext.Current.Request.Files;
if (file.Count < 1)
{
MessageSweetBox.Show(this.Page, "请拍摄图片!", "warning");
return;
}
}
可以测试,以上代码在后台是获取不到前台的图片文件的,因为不加runat="server",在代码编译之后,后台action不会和当前页面绑定,而加上runat="server"之后,则两者就存在了绑定关系,而且在表单提交时,必须在form和type=“file”标签都加上runat="server"属性才可以(封闭式)
第二种方式是(开放式):在form标签中加上 enctype="multipart/form-data" 属性,则 type=“file” 标签中,可以不加,也可以实现上传,后台System.Web.HttpFileCollection file = System.Web.HttpContext.Current.Request.Files;方式获取