C#中实现同时上传多个附件
2011-01-14 11:32
495 查看
添加多个附件的方法是先创建一个临时文件夹,把待上传的文件放在临时文件夹内,然后一并移动到确定的目录中。
添加按钮的代码
/// <summary> /// 添加多个附件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnCopy_Click(object sender, System.EventArgs e) { string fileName=""; if ((this.uploadfile.PostedFile != null) & (this.uploadfile.PostedFile.FileName.Length > 0)) { if (!File.Exists(this.Server.MapPath("uploadArt"))) { Directory.CreateDirectory(Server.MapPath("uploadArt")); } string destDir = this.Server.MapPath("uploadArt"); //创建临时目录 if (!Directory.Exists(destDir + @"/" +UInfo.UserId)) { Directory.CreateDirectory(destDir + @"/" +UInfo.UserId); } destDir = this.Server.MapPath(@"uploadArt/" +UInfo.UserId); string destdir0="";//真实目录 if (Arid== "") { destdir0 = destDir; } else { destdir0 =Server.MapPath(@"uploadArt/" + this.Arid); } try { string[] strArray = this.uploadfile.PostedFile.FileName.ToString().Split('//'); int index = strArray.Length - 1; fileName = strArray[index]; //'检测在listbox列表中是否已经添加该文件 foreach (ListItem item3 in this.filelist.Items) { if (fileName==item3.Value) { string exitfile = "文件:" + fileName + " 已经存在于列表中!"; this.Page.RegisterStartupScript("saved", string.Format("<mce:script language='javascript'><!-- alert('" + exitfile + "'); // --></mce:script>", fileName)); return; } } //检测在临时目录中是否有该文件。 if (File.Exists(Path.Combine(destdir0, fileName))) { File.Delete(Path.Combine(destdir0, fileName)); } this.uploadfile.PostedFile.SaveAs(Path.Combine(destDir, fileName)); ListItem item2 = new ListItem(); this.rongling += this.uploadfile.PostedFile.ContentLength; item2.Text = fileName; item2.Value = fileName; this.filelist.Items.Add(item2); } catch (Exception ex) { this.Page.RegisterStartupScript("error", string.Format("<mce:script language='javascript'><!-- alert('{0}'); // --></mce:script>", ex.Message.ToString())); } } }
删除按钮的代码
/// <summary> /// 删除附件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnDelete_Click(object sender, System.EventArgs e) { string destDir=Server.MapPath("uploadArt"+@"/"+UInfo.UserId); if (this.filelist.SelectedIndex != -1) { string dir = Path.Combine(destDir, this.filelist.SelectedItem.Value); if (!File.Exists(dir)) { string destDir0; if (Arid == "") { destDir0 = dir; } else { destDir0 = this.Server.MapPath(@"uploadArt/" + this.Arid);//真正目录 } dir = Path.Combine(destDir0, this.filelist.SelectedItem.Value); } FileInfo info = new FileInfo(dir); File.Delete(dir); filelist.Items.RemoveAt(filelist.SelectedIndex); } }
删除文件
/// <summary> /// 删除文件 /// </summary> /// <param name="descDirectory"></param> public static void DeleteFiles(string descDirectory) { try { foreach (string str in Directory.GetFiles(descDirectory)) { if (File.Exists(str)) { File.Delete(str); } } } catch { } }
附件的名称
/// <summary> /// 返回附件名称 /// </summary> /// <returns></returns> private string GetFujian() { string str_fujian=""; if(filelist.Items.Count>0) { for(int i=0;i<filelist.Items.Count;i++) { if(i==filelist.Items.Count-1) { str_fujian+=filelist.Items[i].Text; } else { str_fujian+=filelist.Items[i].Text+"|"; } } } return str_fujian; }
点保存按钮后需要移动文件
代码如下:
//处理附件问题,将临时目录中的文件剪贴到以文章ID为文件夹的真正的目录中 //获取文章ID,并生成文件夹 string ArticleID=this.dbArID.Text.Trim(); string str_wok=Server.MapPath("uploadArt"); if(!Directory.Exists(str_wok+@"/"+ArticleID)) { Directory.CreateDirectory(str_wok+@"/"+ArticleID); } //剪贴文件 //将文件放在真正目录 string[] arr=GetFujian().Split('|'); for(int i=0;i<arr.Length;i++) { if(arr[i]!="") { if(!File.Exists(Server.MapPath(@"uploadArt/"+ArticleID)+@"/"+arr[i])) { //若目标文件夹存在此文件则出错 File.Move(Server.MapPath(@"uploadArt/"+UInfo.UserId)+@"/"+arr[i],Server.MapPath(@"uploadArt/"+ArticleID)+@"/"+arr[i]); } } } //删除临时文件夹里的文件 if(Directory.Exists(Server.MapPath(@"uploadArt/"+UInfo.UserId))) { DeleteFiles(Server.MapPath(@"uploadArt/"+UInfo.UserId)); Directory.Delete(Server.MapPath(@"uploadArt/"+UInfo.UserId)); }
修改所上传的附件时代码如下:
//处理附件 //删除附件 DataTable dt=cArticles.Instance().GetByID(this.dbArID.Text.Trim()); string str_fujian=dt.Rows[0]["fujian"].ToString(); string[] arr_ori=str_fujian.Split('|'); string[] arr_new=GetFujian().Split('|'); if(arr_ori.Length>0) { for(int i=0;i<=arr_ori.Length-1;i++) { bool bln=true; if(arr_new.Length>0) { for(int j=0;j<=arr_new.Length-1;j++) { if(arr_new[j]==arr_ori[i]) { bln=false; break; } } if(bln) { string destDir=Server.MapPath(@"uploadArt/"+this.dbArID.Text.Trim()); File.Delete(Server.MapPath(@"uploadArt/"+this.dbArID.Text.Trim()+@"/"+arr_ori[i]));//删除一个没有的文件不报错 } } } } //处理附件 //将临时目录中的文件剪贴到真正的存放目录 string[] arr=GetFujian().Split('|'); for(int i=0;i<=arr.Length-1;i++) { if(arr[i]!="") { if(!File.Exists(Server.MapPath(@"uploadArt/"+Arid)+@"/"+arr[i])) { if(File.Exists(Server.MapPath(@"uploadArt/"+UInfo.UserId)+@"/"+arr[i])) { File.Move(Server.MapPath(@"uploadArt/"+UInfo.UserId)+@"/"+arr[i],Server.MapPath(@"uploadArt/"+this.dbArID.Text.Trim())+@"/"+arr[i]); } } } } //删除临时文件夹里的文件 if(Directory.Exists(Server.MapPath(@"uploadArt/"+UInfo.UserId))) { DeleteFiles(Server.MapPath(@"uploadArt/"+UInfo.UserId)); Directory.Delete(Server.MapPath(@"uploadArt/"+UInfo.UserId)); }
删除所有附件时代码
DeleteFiles(Server.MapPath(@"uploadArt/"+aid)); if (Directory.Exists(this.Server.MapPath(@"uploadArt/"+aid))) { Directory.Delete(Server.MapPath(@"uploadArt/"+aid)); }
相关文章推荐
- jsp+servlet实现多个图片(附件)和其他信息同时上传
- C#的附件上传的简单实现
- C#实现附件上传和下载功能
- javascript实现上传多个附件,并在后台C#处理
- C# 实现发送电子邮件以及上传附件
- ASP.NET 多附件上传实现代码
- 使用ADF组件实现附件上传下载功能
- C#利用Mutex互斥量实现同时只有一个进程实例在运行
- WebClient 实现多文件/文本同时上传
- C#实现文件上传下载
- FCKeditor实现上传分月目录和文件重命名(C#)
- C#中 如何通过路径实现文件上传功能
- 动态增加附件上传文件框的实现
- 关于c#连接ftp进行上传下载实现原理及代码
- asp.net(c#)实现文件上传功能
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
- C# 中WinForm 应用程序实现远程文件管理(上传、下载)的种种问题
- C#实现FTP上传下载功能
- 利用包commons-fileupload-1.2.jar实现页面的附件上传
- 文件上传的实现(C#)