1 首先得创建个文件夹保存上传的文件;
2 在项目里加一个上传文件的控件FileUpload和按钮,目的是点击按钮上传文件,效果如图所示:
3 上传文件 :用SaveAs方法,代码如下:
private void Button1_Click(object sender, EventArgs e) { string path = "Upload/aaa.text";//将类型为TXT的文件命名为aaa.text并存到Upload文件夹里 string end = Server.MapPath(path);//将虚拟路径转换为物理路径 FileUpload1.SaveAs(end); //执行上传命令 }
4 逐步完善
1) 只能上传类型为TXT的文件;
解决方法:将文件名改成原文件的名字;即:
string path = "Upload/aaa.text" 改成 string path = "Upload/"+FileUpload1.FileName; //上传所有类型的文件
2)重名覆盖
解决方法:
1)上传文件名字加上日期,即:
string path = "Upload/"+DateTime.Now.ToString("yyyMMddHHmmssms")+FileUpload1.FileName;
2)为防止碰到两个人同一时间同时上传造成再次重名再加一步:
解决方法:将用户名再加上(必须保证数据库用户名不能相同)即:
3)提高安全性:
解决方法:第一步将上传的名字以'.'拆分,然后判断最后一个.后的后缀名,就是判断文件的上传类型,如果是不允许上传类型就阻止;代码如下:
private void Button1_Click(object sender, EventArgs e) { string[] s=FileUpload1.FileName.Split('.'); //将文件名以'.'拆分 if (s[s.Length - 1] == "aspx" || s[s.Length - 1] == "asp" || s[s.Length - 1] == "avi") //判断上传文件的类型 { Response.Write("<script> alert('不被允许上传的文件类型') ;</script>"); return ; //阻止,不让继续执行下边代码 } string path = "Upload/"+Session["user"]+DateTime.Now.ToString("yyyMMddHHmmssms")+FileUpload1.FileName;//将类型为TXT的文件命名为aaa.text并存到Upload文件夹里 string end = Server.MapPath(path);//将虚拟路径转换为物理路径 FileUpload1.SaveAs(end); //执行上传命令 }
4)约束用户上传文件类型
解决方法:在源代码里的FileUpload1控件里添加一条属性;即:
accept 就是能上传的文件,只是为了用户上传更方便(用户只能看到accept约束的类型)但仍可以通过其他方式上传其他文件所以后边验证类型代码仍然需要
5) 扩容 ;默认上传文件的大小4MB;如果需要限制文件长度则需要在项目配置文件里将允许最大请求长度扩容;以网站项目为例;即在Web.config里添加 httpRuntime (网站打开时运行的)的maxRequestLength(最大请求长度)40960就是40M属性即: