首页 > 代码库 > 文件上传下载(用例)
文件上传下载(用例)
在编写下载文件代码时,要注意一点。若是火狐浏览器,则不需要编码,要区别对待
直接上代码
1 namespace 上传文件 2 { 3 public partial class WebForm1 : System.Web.UI.Page 4 { 5 public static string fileName = ""; 6 protected void Page_Load(object sender, EventArgs e) 7 { 8 if (!IsPostBack) 9 { 10 BindDropDownList(); 11 } 12 } 13 14 //上传文件 15 protected void Button1_Click(object sender, EventArgs e) 16 { 17 if (FileUpload1.HasFile) 18 { 19 fileName = FileUpload1.FileName; 20 string result = fileUpload(fileName); 21 if (!string.IsNullOrEmpty(result)) 22 { 23 Page.ClientScript.RegisterClientScriptBlock(Page.ClientScript.GetType(), "myscripts", "<script>alert(\"上传成功!\");</script>"); 24 BindDropDownList(); 25 } 26 else 27 { 28 Page.ClientScript.RegisterClientScriptBlock(Page.ClientScript.GetType(), "myscripts", "<script>alert(\"上传失败!\");</script>"); 29 } 30 } 31 } 32 33 34 /// <summary> 35 /// 上传文件 36 /// </summary> 37 /// <param name="fileName">文件名称</param> 38 /// <returns></returns> 39 public static string fileUpload(string fileName) 40 { 41 string fileNewName = String.Empty; 42 if (fileName.Length > 0) 43 { 44 string fileExtension = Path.GetExtension(fileName).ToLower(); 45 if (checkFileExtension(fileExtension)) 46 { 47 //fileNewName = DateTime.Now.ToString("yyyyMMddhhmmss") + fileExtension; 48 fileNewName = fileName; 49 HttpPostedFile file = HttpContext.Current.Request.Files[0]; 50 file.SaveAs(HttpContext.Current.Server.MapPath("File/" + fileNewName)); 51 } 52 } 53 return fileNewName; 54 } 55 56 /// <summary> 57 /// 检查上传文件格式是否正确 58 /// </summary> 59 /// <param name="fileExtension">文件扩展名</param> 60 /// <returns></returns> 61 public static bool checkFileExtension(string fileExtension) 62 { 63 string[] extensionArr = { ".doc", ".txt", ".pdf", ".rar", ".zip", ".docx", ".doc", ".ppt", ".png", ".gif", ".jpg", ".jpeg",".exe"}; 64 for (int i = 0; i < extensionArr.Length; i++) 65 { 66 if (fileExtension == extensionArr[i]) 67 { 68 return true; 69 } 70 } 71 return false; 72 } 73 74 //获取所有文件文件名 75 public List<string> GetFileNames() 76 { 77 string path = Server.MapPath("File"); 78 DirectoryInfo dir = new DirectoryInfo(path); 79 FileInfo[] files = dir.GetFiles(); 80 List<string> list = new List<string>(); 81 foreach (FileInfo item in files) 82 { 83 list.Add(item.Name); 84 } 85 return list; 86 } 87 88 //绑定dropdownList 89 private void BindDropDownList() 90 { 91 DropDownList1.DataSource = GetFileNames(); 92 DropDownList1.DataBind(); 93 DropDownList1.Items.Insert(0, "请选择文件"); 94 } 95 96 //下载指定文件 97 protected void Button2_Click(object sender, EventArgs e) 98 { 99 if(DropDownList1.SelectedIndex!=0)100 {101 string fileName = DropDownList1.SelectedItem.ToString();//客户端保存的文件名102 string filePath = Server.MapPath("File/") + fileName;//路径103 DownLoadFile(fileName, filePath);104 }105 else106 {107 Page.ClientScript.RegisterClientScriptBlock(Page.ClientScript.GetType(), "myscripts", "<script>alert(\"请选择下载文件!\");</script>");108 }109 }110 111 112 /// <summary>113 /// 文件下载114 /// </summary>115 /// <param name="fileName">文件名称</param>116 /// <param name="filePath">文件绝对路径</param>117 public void DownLoadFile(string fileName, string filePath)118 {119 120 ////WriteFile分块下载121 string browserType = Request.Browser.Browser.ToString();//获取浏览器类型122 123 string fileNewName = "";124 if (browserType != "Firefox")//火狐浏览器不需要进行编码,文件名称就能显示125 {126 fileNewName = HttpUtility.UrlEncode(fileName); //如果不是火狐浏览器,加上HttpUtility.UrlEncode()方法,防止文件下载时,文件名乱码127 }128 else129 {130 fileNewName = fileName;131 }132 133 System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);134 135 if (fileInfo.Exists == true)136 {137 const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力138 byte[] buffer = new byte[ChunkSize];139 140 Response.Clear();141 System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);142 long dataLengthToRead = iStream.Length;//获取下载的文件总大小143 Response.ContentType = "application/octet-stream";144 Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);145 146 while (dataLengthToRead > 0 && Response.IsClientConnected)147 {148 int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小149 Response.OutputStream.Write(buffer, 0, lengthRead);150 Response.Flush();151 dataLengthToRead = dataLengthToRead - lengthRead;152 }153 Response.Close();154 155 }156 }157 158 159 }160 }
文件的下载方式有很多,具体可以参考:http://www.cnblogs.com/zhangzt/archive/2009/12/14/1623426.html
文件上传下载(用例)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。