1. 前台代码
<head runat="server">
<title></title>
<link href="../../../stylesheets/bootstrap-theme.css" rel="stylesheet" type="text/css" />
<link href="../../../stylesheets/bootstrap.css" rel="stylesheet" type="text/css" />
<script src="../../../javascripts/bootstrap.js" type="text/javascript"></script>
<script src="../../../javascripts/common-validate.js" type="text/javascript"></script>
<script type="text/javascript">
function checkFile() {
var file = document.getElementsByName("File")[0].value;
if (file.trim() == "") {
alert("请选择文件!!");
return false;
}
if (!isExcelXls(file)) {
alert("Excel文件必须是 .xls 格式!!");
return false;
}
}
</script>
</head>
<body>
<form id="form1" runat="server" enctype="multipart/form-data"> <!--红色部分不能少-->
<div class="panel panel-primary">
<div class="panel-heading">
<h5 class="panel-title">导出装箱单</h5>
</div>
<div class="panel-body" style="margin-top:20px;">
<div class="form-group">
<div style="float:left;width:240px;padding-top:5px;text-align:right;padding-right:10px;">
<label class="control-label">请选择文件</label>
</div>
<div style="float:left;width:300px;padding-top:5px">
<input type="file" name="File" />
</div>
<div style="float:left;width:120px;text-align:right">
<asp:Button ID="btn_export" runat="Server" Text="导出装箱单" CssClass="btn btn-info" OnClientClick="return checkFile()"
onclick="btn_export_Click" />
</div>
<div style="float:left;width:120px;text-align:right;padding-top:6px;">
<a href="../../excel/template/export-zhuangxiang-template.xls">模板</a>
</div>
</div>
</div>
<div class="panel-footer">
</div>
</div>
</form>
</body>
2.后台获取文件的代码
protected void btn_export_Click(object sender, EventArgs e)
{
HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
int count = files.Count;
string name = files[0].FileName;
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + name; // 文件名称,当前时间(yyyyMMddhhmmss)
string webFilePath = Server.MapPath("~/viewpage/excel/zhuangxiang/") + fileName; // 服务器端文件路径
files[0].SaveAs(webFilePath);
DataTable table = new DBConn().getExcelContent(webFilePath);
foreach (DataRow dr in table.Rows)
{
if (dr[0].ToString() != "" && dr[1].ToString() != "")
{
}
}
}
3.必须加上 enctype属性
enctype 属性有三种取值 :
1、application/x-www-form-urlencoded
2、multipart/form-data
3、text/plain
其中application/x-www-form-urlencoded是默认值,作用是设置表单传输的编码。例如我们在AJAX中见过xmlHttp.setRequestHeader("Content-Type","application/x-www-form- urlencoded");如果不写会报错的,但是在html的form表单里是可以不写enctype=application/x-www-form-urlencoded,因为默认的HTML表单就是这种传输编码类型的。
而multipart/form-data是用来制定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或是是mp3等等。
text/plain是纯文本传输的意思,在发邮件的时候要设置这种编码类型,否则会出现接收时编码混乱的问题。网络上经常拿text/plain和 text/html做比较,其实这两个很好区分,前者用来传输纯文本文件,后者则是传递html代码的编码类型,在发送头文件时才用得上。①和③都不能用于上传文件,只有multipart/form-data才能完整的传递文件数据
上面提到的MIME,它的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服务器将 MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件。