- 浏览: 601847 次
- 性别:
- 来自: 卡哇伊
文章分类
- 全部博客 (299)
- C# (25)
- Java (1)
- WinForm (0)
- Asp.Net (86)
- Jsp (2)
- Php (1)
- Web Service (0)
- Desgin Patterns (19)
- Data Structure & Algorithms (1)
- SQLserver (41)
- Mysql (0)
- Oracle (2)
- Javascript (50)
- Ajax (10)
- Jquery (1)
- Flex (0)
- Regular Expression (5)
- DIV+CSS+XHTML+XML (18)
- Software Test (0)
- Linux (0)
- Utility (17)
- Net Digest (4)
- windows 2003 (10)
- Other (4)
- English (1)
- IT Term (1)
最新评论
-
w497480098h:
学习了 很好谢谢
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表) -
main_fun:
确实不错
iframe自适应高度 -
jveqi:
...
DBA -
mxcie:
其它版本没有确认,今天使用vs2003时,其.sln文件也需要 ...
彻底删除项目的VSS源代码管理信息 -
moneyprosper:
就只有IE支持,火狐和谷歌都不支持此种方法。正在寻找中。。。
从父页面读取和操作iframe中内容方法
服务器端检查两种方式:
1.检查文件的扩展名.
2.读取文件的二进制.
检查文件的扩展名:
检查文件的扩展名: //判断是否有上传文件 if (FileUpload1.HasFile) { //截取要上传文件的扩展名 //string extension = FileUpload1.FileName .Substring(FileUpload1.FileName.LastIndexOf(".")).ToLower(); string extension = System.IO.Path .GetExtension(FileUpload1.FileName).ToLower(); //上传文件是否大于10MB if (FileUpload1.PostedFile.ContentLength < 10485760) { //设置支持上传的文件格式 string[] allowedextension = { ".jpg", ".gif", ".jpeg", ".bmp", ".png" }; for (int i = 0; i < allowedextension.Length; i++) { //判断上传文件扩展名是否正确 if (!(extension != allowedextension[i])) { try { //上传文件 FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Files/")+ FileUpload1.FileName); lblMessage.Text = "文件上传成功!"; break; } catch (Exception ex) { lblMessage.Text = "出现错误,无法上传!"; } } else { lblMessage.Text = "不支持" + extension + "格式的文件!"; } } } else { lblMessage.Text = "上传文件大小不能超过10MB!"; } } else { lblMessage.Text = "不存在上传文件!"; }
以上例子做法的弊端,假设上传文件是.wma文件,把扩展名改成.jpg文件那么将不能被识别,依然能够上传.
解决方法:通过读取文件的二进制,每种文件的二进制前面两个字节都是不一样的,不同的文件扩展名它的
二进制前面两个字节是不同的.我们可以通过这种方式来检测文件的扩展名.如:.jpg文件前两个字节是:255216
.gif文件前两个字节是:7173,6677是BMP,13780是PNG;7790是exe,8297是rar.
上传文件名相同,文件将被覆盖,我们要对文件名的唯一性处理该怎么办呢?
上传文件名唯一性的处理:
1.利用时间戳
2.利用GUID(全局统一标识符)
GUID的介绍可以参考;http://jhxk.iteye.com/admin/blogs/393195
读取文件的二进制并且对文件名的唯一性做处理:
protected void btnUpLoad_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { //判断文件大小是否大于10MB if (FileUpload1.PostedFile.ContentLength < 10485760) { if (CheckFileType()) { try { /*使用时间戳精确到毫秒,SessionID,上传文件大小, 5位随机数,来做上传文件名唯一性的处理*/ /* Random rd = new Random(); String fileName = DateTime.Now.ToString("yyyyMMddhhmmssfff")+ rd.Next(10000,99999)+ Session.SessionID + FileUpload1.PostedFile.ContentLength + System.IO.Path.GetExtension(FileUpload1.FileName);*/ /*如果使用时间戳还觉得不够保险,需要绝对唯一 *那么可以使用GUID(全局的唯一标示符):*/ string fileName = Guid.NewGuid().ToString() + System.IO.Path.GetExtension(FileUpload1.FileName); FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Files/") + fileName); lblMessage.Text = "上传文件成功!"; } catch (Exception) { lblMessage.Text = "出现异常无法上传!"; } } else { lblMessage.Text = "不支持此文件格式!"; } } else { lblMessage.Text = "文件大小不能超过10MB"; } } else { lblMessage.Text = "文件不存在,请选择文件!"; } } //通过读取文件二进制的前两个字节判断文件的类型 private bool CheckFileType() { //得到客户端文件的绝对路径 String file=FileUpload1.PostedFile.FileName; //创建文件流. System.IO.FileStream fs = new System.IO.FileStream(file,System.IO.FileMode.Open,System.IO.FileAccess.Read); //创建读取文件二进制的对象 System.IO.BinaryReader br=new System.IO.BinaryReader(fs); string fileType=String.Empty; //读取文件的第一个字节,并将读取位置提升一个字节. fileType = br.ReadByte().ToString(); //读取第二个字节,并将读取位置提升一个字节. fileType += br.ReadByte().ToString(); /*如果不知道文件的二进制前两个字节,可以将它打印出来: * Response.Write(fileBinary); */ //允许上传文件的扩展名 String[] allowtedExtension = {"255216", "7173", "6677"}; //判断是否允许上传的文件类型 foreach (string allowEx in allowtedExtension) { if (!(allowEx != fileType)) { return true; } } return false; }
文件下载示例:
//加载下载列表 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //首先,获取存放文件目录 string directoryPath = Server.MapPath("~/Files"); //创建目录对象,用来创建,移动和枚举目录及子目录. System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(directoryPath); /*获取在这个目录下所有的文件, GetFileSystemInfos()方法返回所有文件和子目录*/ System.IO.FileSystemInfo[] infos = dir.GetFileSystemInfos(); //定义列表选项 ListItem myItem; //通过foreach遍历整个文件夹里,所有的文件. foreach (System.IO.FileSystemInfo myfile in infos) { //实例化列表选项 myItem = new ListItem(); //获取文件夹中文件的名称. myItem.Text = myfile.Name; //获取文件夹中文件的完整路径名称. myItem.Value = myfile.FullName; //将里表项添加到列表框中 ListBox1.Items.Add(myItem); } } } //单击下载 protected void btnDownLoad_Click(object sender, EventArgs e) { //获取文件的路径名 String selectName = ListBox1.SelectedItem.Value; //获取文件名 String saveFileName = ListBox1.SelectedItem.Text; //用来创建,复制,移动,打开文件的实例 System.IO.FileInfo finfo = new System.IO.FileInfo(selectName); //得到下载文件大小 String fileSize=finfo.Length.ToString(); //首先清空输出流 Response.Clear(); //设置输出流字符集(编码)为UTF-8 Response.Charset = "UTF-8"; Response.ContentEncoding = System.Text.Encoding.UTF8; //设置为缓冲输出,处理完整个响应之后发送它 Response.Buffer = true; //实现动态生成下载的文件名,并进行URL字符串编码,否则文件名为中文会乱码 Response.AppendHeader("Content-Disposition", "attachment;filename=" +HttpUtility.UrlEncode(saveFileName)); //设置HTTP MIME类型(输出流的文件类型) //我们使用未知类型,对它的类型不加以限定. Response.ContentType = "application/unknow"; //不指明Content-Length用Flush的话不会显示下载进度 Response.AddHeader("Content-Length", fileSize); //将指定文件直接写入HTTP响应输出流 Response.WriteFile(selectName); //清空缓冲区,向客户端发出所有缓冲输出 Response.Flush(); Response.Close(); Response.End(); }
下载示例界面参考:
发表评论
-
JS操作RadioButtonList
2009-12-16 23:25 3850function IsUpPic() { ... -
asp.net跳转页面的三种方法比较
2009-10-22 14:16 25021.Response.redir ... -
ASP.NET网站中的安全问题
2009-10-20 16:57 1160在网络经常看到网站被 ... -
新闻内容页分页的简单做法
2009-10-10 10:08 1194该例子只是提供了基本思路 很简单的做法,这个是假设数 ... -
Asp.net控件开发学习笔记(二)-控件开发基础
2009-10-03 16:49 1314接上篇…….. 看System.Web.UI.Ht ... -
Asp.net控件开发学习笔记-控件开发基础(一)
2009-10-03 16:33 1219服务器控件开发基础 当开发一个服务器控件时,首 ... -
Asp.net用户退出,清空Session,重定向登陆页面
2009-09-28 16:22 4119protected void Page_Load(object ... -
frameset中的aspx无法Postback
2009-09-28 16:07 1462<frameset cols="150,*&q ... -
.net页面定时刷新的几种简单方式
2009-09-28 11:20 58821: window.setTimeout("win ... -
动态添加TextBox
2009-09-21 16:30 1651方法1: 前台代码: <f ... -
浅谈ASP.NET管道优化
2009-09-20 21:43 975ASP.NET管道优化 位于请求管道中的很多ASP.NET默 ... -
Asp.net 页面返回到上一页面
2009-09-20 21:20 875/// <summary> / ... -
PrecompiledApp.config文件和Global.asax 文件中的事件的关联
2009-09-19 10:24 2741在用Microsoft Visual Studio 2005开 ... -
gridview列 数字、货币和日期 显示格式
2009-09-11 17:05 1508在设置gridview等数据绑定控件的模版列时,总要 ... -
ASP.NET 打开新窗口几种方法
2009-09-09 21:44 3290ASP.NET打开新窗口方法一: Response ... -
response.addHeader("Content-Disposition","attachment; filename="+filename)中的中文乱码
2009-08-31 15:10 3175两种解决方法 1.如果web.config里utf-8 直接S ... -
技巧和诀窍:如何在VS 2005 SP1中使用VS的web服务器运行一个相对于根目录“/”的网站
2009-08-31 08:29 835大家常有一个疑问,是 ... -
Request.ServerVariables详细说明及代理
2009-08-14 10:46 2067ServerVariables是环境变量的集合。允许读取HTT ... -
DataList和Repeat无数据时提示暂无数据几种方法
2009-08-11 18:45 25331.放一个label DataTable table ... -
Asp.Net中清空所有textbox的几种方法
2009-08-08 08:53 5150用反射: FieldInfo[] info ...
相关推荐
基于jquery.form插件写的ASP.NET文件批量上传。
Asp.NET 文件上传下载 Asp.NET 文件上传下载 Asp.NET 文件上传下载 Asp.NET 文件上传下载
自己做的asp.net文件上传示例 代码比较简单 vs2005打开直接F5运行 各位可以根据自己的需求做一些修改
asp.net文件上传带进度条 文件上传 ajax文件上传
asp.net 文件上传demo 框架3.5 flash与.net相结合实现文件上传功能 支持 大文件上传 文件批量上传
asp.net上传 多文件上传 批量上传 上传代码 上载asp.net上传 多文件上传 批量上传 上传代码 上载asp.net上传 多文件上传 批量上传 上传代码 上载asp.net上传 多文件上传 批量上传 上传代码 上载asp.net上传 多文件...
各种注视用户体验的程序出现,比如带进度条的文件上传,看了网上很多资料还没找到真正意义上的ASP.NET实现进度条上传.Ajax 文件上传进度条,ASP.NET 文件上传进度条示例,ASP.NET 文件上传,asp.net文件上传,ajax文件...
asp.net文件上传源码 uploadpic_zpfj.aspx uploadpic_zpfj.aspx.cs
本文讲的是Asp.Net中FileUpload实现文件上传示例, 属性:FileName: 获取上传的文件名 HasFile: 是否选择(存在)上传的文件 ContentLength: 获得上窜文件的大小,单位是字节(byte) 方法:Server.MapPath(): 获取服务器上
asp.net自定义固定格式多文件批量上传
基于ASP.NET文件上传、下载的网络硬盘系统 源码
ASP.NET的文件上传功能,可上传大文件,缺点就是上传大文件的时候程序加载文件的时间有点长,文件越大加载的速度就越慢,所以使用时要有耐心,对于500MB一下的文件加载还是挺快的。可自己在配置文件中修改上传文件的...
asp.net文件上传下载程序 有数据库 下载可用 很好的程序 精心制作
ASP.NET多文件上传 ASP.NET多文件上传 ASP.NET多文件上传 ASP.NET多文件上传
觉得不错,但是有个不足的地方,就是当我上传一个文件时把页面关闭的时候 这个文件其实还在上传着!
asp.net+ajax 实现的多文件上传, 支持文件单独和批量上传,单个和批量移除
asp.net操作文件的上传、读出、删除等操作!!!
Asp.net同时上传多个文件Asp.net同时上传多个文件Asp.net同时上传多个文件Asp.net同时上传多个文件
从本地选择的文件,应用asp.net上传文件到服务器。