学习, And 整理了一下.
(一). 示例图片
(二). 示例代码
1 public partial class UpMultiFileControl2 : System.Web.UI.UserControl 2 { 3 protected void Page_Load( object sender, EventArgs e) 4 { 5 if ( ! Page.IsPostBack) 6 { 7 SaveCurrentPageFileControls(); 8 } 9 } 10 protected void btAddFile_Click( object sender, EventArgs e) 11 { 12 AddOneFileControl(); 13 } 14 15 /**/ /// <summary> 16 /// 添加一个上传文件控件 17 /// </summary> 18 private void AddOneFileControl() 19 { 20 ArrayList al = new ArrayList(); 21 this .tbFiles.Rows.Clear(); 22 GetFileControlsFromSession(); 23 HtmlTableRow htr = new HtmlTableRow(); 24 HtmlTableCell htc = new HtmlTableCell(); 25 htc.Controls.Add( new FileUpload()); 26 htr.Controls.Add(htc); 27 this .tbFiles.Rows.Add(htr); 28 SaveCurrentPageFileControls(); 29 } 30 31 /**/ /// <summary> 32 /// 读取缓存中存储的上传文件控件集 33 /// </summary> 34 private void GetFileControlsFromSession() 35 { 36 ArrayList al = new ArrayList(); 37 if (Session[ " FilesControls " ] != null ) 38 { 39 al = (System.Collections.ArrayList)Session[ " FilesControls " ]; 40 for ( int i = 0 ; i < al.Count; i ++ ) 41 { 42 HtmlTableRow htr1 = new HtmlTableRow(); 43 HtmlTableCell htc1 = new HtmlTableCell(); 44 htc1.Controls.Add((System.Web.UI.WebControls.FileUpload)al[i]); 45 htr1.Controls.Add(htc1); 46 this .tbFiles.Rows.Add(htr1); 47 } 48 } 49 } 50 51 /**/ /// <summary> 52 /// 保存当前页面上传文件控件集到缓存中 53 /// </summary> 54 private void SaveCurrentPageFileControls() 55 { 56 ArrayList al = new ArrayList(); 57 foreach (Control controlTR in this .tbFiles.Controls) 58 { 59 if (controlTR.GetType().ToString() == " System.Web.UI.HtmlControls.HtmlTableRow " ) 60 { 61 HtmlTableCell htc = (HtmlTableCell)controlTR.Controls[ 0 ]; 62 foreach (Control controlFileUpload in htc.Controls) 63 { 64 if (controlFileUpload.GetType().ToString() == " System.Web.UI.WebControls.FileUpload " ) 65 { 66 FileUpload tempFileUpload = (FileUpload)controlFileUpload; 67 al.Add(tempFileUpload); 68 } 69 } 70 } 71 } 72 Session.Add( " FilesControls " , al); 73 } 74 75 protected void btUpFiles_Click( object sender, EventArgs e) 76 { 77 UpLoadFiles(); 78 } 79 80 /**/ /// <summary> 81 /// 上传文件操作 82 /// </summary> 83 private void UpLoadFiles() 84 { 85 string filepath = Server.MapPath( " ./ " ) + " UploadFiles " ; 86 87 HttpFileCollection uploadedFiles = Request.Files; 88 for ( int i = 0 ; i < uploadedFiles.Count; i ++ ) 89 { 90 HttpPostedFile userPostedFile = uploadedFiles[i]; 91 try 92 { 93 if (userPostedFile.ContentLength > 0 ) 94 { 95 userPostedFile.SaveAs(filepath + " \\ " + System.IO.Path.GetFileName(userPostedFile.FileName)); 96 Response.Write( " 已上传文件: \ "" + filepath + " \\ " + userPostedFile.FileName + " \ " <br><br> " ); 97 } 98 } 99 catch 100 { 101 Response.Write( " 上传文件: \ "" + userPostedFile.FileName + " \ " 出错! " ); 102 } 103 } 104 if (Session[ " FilesControls " ] != null ) 105 { 106 Session.Remove( " FilesControls " ); 107 } 108 } 109 }
(三). 改变上传文件大小和时间限制
<httpRuntime>
executionTimeout="110" //允许上传文件最大等待时间 maxRequestLength="4096" //上传文件大小,默认为4M </httpRuntime>上传文件大小是由上面两个参数所决定的. 涉及到安全因素,最好不要设得太大.
(四). 示例源代码下载
(五).控件缺点
由于安全原因, 用服务端控件实现,回发时选择的文件不能够保存.
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=699244