步骤:
一.上传文件;
二.获取文件类型集合;
三.设置保存路径;
四.判断文件类型,如文件大小、文件后缀名;
五.保存文件。
1.新建一个html文件,在html文件写入如下内容:
注意:method必须设置为post,enctype必须设置为multipart/form-data,请看enctype的值有如下几种:
application/x-www-form-urlencoded:在发送前编码所有字符(默认)
multipart/form-data:不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
text/plain:空格转换为 "+" 加号,但不对特殊字符编码。
<form action="Text1.ashx" method="post" enctype="multipart/form-data"> <input type="file" name="file1" /><br /> <input type="text" name="name" value="" /><br /> <input type="submit" value="上传" /> </form>
2.新建一个一般处理程序.ashx,填入如下内容:
context.Response.ContentType = "text/html"; HttpPostedFile file1 = context.Request.Files["file1"];//获取上传的文件的集合 //设置保存路径 string filePath = context.Server.MapPath("~/unload" + "/" + file1.FileName); //判断文件大小 if (file1.ContentLength > 1024 * 1024 * 1) { context.Response.Write("只能上传小于2MB文件"); return; } //保存文件 file1.SaveAs(filePath); context.Response.Write(filePath + "---上传成功");
3.运行html页面即可将文件保存到当前目录下的unload下面
HttpPostedFile对象有如下属性:
ContentLength:获取上载文件的大小(以字节为单位)
ContentType:获取客户端发送的文件的 MIME 内容类型
FileName:获取客户端上的文件的完全限定名称
SaveAs:保存上传文件的内容
案例一:上传文件到根目录下的年、月、日目录下
context.Response.ContentType = "text/html"; //获取上传的文件的集合 HttpPostedFile file1 = context.Request.Files["file1"]; //创建年、月、日 DateTime dt = DateTime.Now; int year = dt.Year; int month = dt.Month; int day = dt.Day; string date = (year + "/" + month + "/" + day + "/").ToString(); //获取虚拟路径 string filePath = context.Server.MapPath("~/unload" + "/" + date); //创建文件夹 if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } //判断文件类型 if (file1.ContentLength > 1024 * 1024 * 1) { context.Response.Write("只能上传小于2MB文件"); return; } filePath += file1.FileName; //保存文件 file1.SaveAs(filePath); context.Response.Write(filePath + "---上传成功");
上传文件后显示图片
//获取文件扩展名
string ext = Path.GetExtension(filePath); if (ext == ".jpg" || ext == "gif" || ext == "png") { context.Response.ContentType = "image/jpeg"; string path = context.Server.MapPath("~/unload" + "/" + date + file1.FileName); using (Stream instream = File.OpenRead(path)) { instream.CopyTo(context.Response.OutputStream); } }
案例二:将excel数据内容显示在网页上
1.html文件内容
<form action="WebExcel.ashx" method="post" enctype="multipart/form-data"> <input type="file" name="excelFile" /> </p> <input type="submit" name="btnOK" /> </form>
2.一般处理程序代码
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; HttpPostedFile excelFile = context.Request.Files["excelFile"]; //判断文件大小、后缀名 if (excelFile.ContentLength <= 0) { context.Response.Write("没有选择文件"); return; } string fileExt = Path.GetExtension(excelFile.FileName); if (fileExt != ".xls" && fileExt != ".xlsx") { context.Response.Write("只允许上传xls或xlsx文件"); return; } OutputHtmlFirst(context.Response); //创建excel,读取上传文件内容 IWorkbook workbook = WorkbookFactory.Create(excelFile.InputStream); for (int i = 0; i < workbook.NumberOfSheets; i++) //workbook.NumberOfSheets { ISheet sheet = workbook.GetSheetAt(i); OutputSheet(context.Response, sheet); } OutputHtmlEnd(context.Response); } //输出单元格内容 private void OutputSheet(HttpResponse response, ISheet sheet) { response.Write("<h1>" + sheet.SheetName + "</h1>"); response.Write("<table border='1' cellpadding='0' cellspacing='0'>"); for (int i = sheet.FirstRowNum; i <= sheet.LastRowNum; i++) { IRow excelRow = sheet.GetRow(i); response.Write("<tr>"); for (int j = excelRow.FirstCellNum; j < excelRow.LastCellNum; j++) { ICell cell = excelRow.GetCell(j); string cellValue = cell.ToString(); response.Write("<td>" + cellValue + "</td>"); } response.Write("</tr>"); } response.Write("</table>"); } //输出html表头 private void OutputHtmlFirst(HttpResponse response) { response.Write("<html><body>"); } //输出html结尾 private void OutputHtmlEnd(HttpResponse response) { response.Write("</body></html>"); }