asp .net 多文档上传控件
在moss要做多文档上传,moss使用的多文档上传控件,必须要客户端安装office组件,这就限制了这个组件的使用,只有自己写一个上传控件了,在google一下,发现codeproject上有一篇文章正好符合我的要求,参考这个文章封装成了一个控件。
界面如下:
控件的公共属性:
其中ButtonCSS是设置在按钮上的样式,此样式设置在TD上
InputFileCSS是设置选择文件控件的样式
ListBoxCSS是设置要上载的文件框的样式,此样式设置在TD上
FileList是获取要上载的文件列表,类型为:System.Web.UI.HtmlControls.HtmlInputFile[]
FilesCount是上载文件的数目
UpLoadButtonEnable是启用控件中的上载按钮设置,当设置为true时,就必须设置属性“UpLoadPath“
UpLoadPath是上载文件的路径
源码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
namespace CDMTC.SCTelKM.Repository.code
{
public class MultipleFileUpload : WebControl
{
#region 公共属性
protected System.Web.UI.WebControls.ListBox ListBox1;
protected System.Web.UI.WebControls.Button AddFile;
protected System.Web.UI.WebControls.Button RemvFile;
protected System.Web.UI.HtmlControls.HtmlInputFile FindFile;
protected System.Web.UI.HtmlControls.HtmlInputButton Upload;
protected System.Web.UI.WebControls.Label lblError;
// public ArrayList files = new ArrayList();
static private List<HtmlInputFile> hif = new List<HtmlInputFile>();
private int filesUploaded = 0;
public int FilesCount
{
get
{
return hif.Count;
}
}
public MultipleFileUpload()
{
lblError = new Label();
}
private bool _UpLoadButttonEnable;
/// <summary>
/// 是否启用默认的上载文件操作
/// </summary>
public bool UpLoadButttonEnable
{
set
{
_UpLoadButttonEnable = value;
}
get
{
return _UpLoadButttonEnable;
}
}
private string _UpLoadPath;
/// <summary>
/// 上载文件的路径,物理路径,如:c:\temp
/// </summary>
public string UpLoadPath
{
set
{
_UpLoadPath = value;
}
get
{
return _UpLoadPath;
}
}
public HtmlInputFile[] FileList
{
get
{
return hif.ToArray();
}
}
#endregion
#region Style
private string _ListBoxCSS = "";
[Category("样式定义")]
[Browsable(true)]
[DisplayName("文件列表框样式")]
[Description("此样式应用于TD上")]
public string ListBoxCSS
{
set
{
_ListBoxCSS = value;
}
get
{
return _ListBoxCSS;
}
}
private string _ButtonCSS = "";
[Category("样式定义")]
[Browsable(true)]
[DisplayName("按钮样式")]
[Description("此样式应用于TD上")]
public string ButtonCSS
{
set
{
_ButtonCSS = value;
}
get
{
return _ButtonCSS;
}
}
private string _InputFileCSS = "";
[Category("样式定义")]
[Browsable(true)]
[DisplayName("文件选择控件样式")]
[Description("此样式应用于TD上")]
public string InputFileCSS
{
set
{
_InputFileCSS = value;
}
get
{
return _InputFileCSS;
}
}
#endregion
protected override void OnLoad(EventArgs e)
{
if (_UpLoadButttonEnable && string.IsNullOrEmpty(_UpLoadPath))
{
throw new Exception("设置了启用内部上传操作时,必须设置上传路径(UpLoadPath)");
}
CreateControls();
if (!Page.IsPostBack)
{
hif.Clear();
ListBox1.Items.Clear();
}
if (hif.Count == 0)
ListBox1.Items.Clear();
lblError.Text = "";
base.OnLoad(e);
}
private void CreateControls()
{
Table tb = new Table();
tb.Attributes.Add("width", "100%");
tb.Attributes.Add("border", "0");
TableRow tr = new TableRow();
TableCell tc = new TableCell();
FindFile = new HtmlInputFile();
if (!string.IsNullOrEmpty(_InputFileCSS))
{
tc.Attributes.Add("class", _InputFileCSS);
}
tc.Controls.Add(FindFile);
AddFile = new Button();
AddFile.Text = "添加";
AddFile.Click += new EventHandler(AddFile_Click);
tc.Controls.Add(AddFile);
RemvFile = new Button();
RemvFile.Text = "删除";
RemvFile.Click += new EventHandler(RemvFile_Click);
tc.Controls.Add(RemvFile);
if (_UpLoadButttonEnable)
{
Upload = new HtmlInputButton();
Upload.Value = "上载";
Upload.ServerClick += new EventHandler(Upload_ServerClick);
tc.Controls.Add(Upload);
}
if (!string.IsNullOrEmpty(_ButtonCSS))
{
tc.Attributes.Add("class", _ButtonCSS);
}
tr.Cells.Add(tc);
tb.Rows.Add(tr);
tr = new TableRow();
tc = new TableCell();
ListBox1 = new ListBox();
tc.Controls.Add(ListBox1);
tr.Cells.Add(tc);
ListBox1.Height = 100;
if (!string.IsNullOrEmpty(_ListBoxCSS))
{
tc.Attributes.Add("class", _ListBoxCSS);
}
tb.Rows.Add(tr);
tr = new TableRow();
tc = new TableCell();
tc.Controls.Add(lblError);
tr.Cells.Add(tc);
tb.Rows.Add(tr);
Controls.Add(tb);
}
protected override void OnPreRender(EventArgs e)
{
if (hif.Count == 0)
{
ListBox1.Items.Clear();
ListBox1.Width = 350;
ListBox1.ToolTip = "此框列出要上载的文档列表";
}
else
{
StringBuilder str = new StringBuilder();
foreach (ListItem li in ListBox1.Items)
{
str.Append(li.Text);
str.Append("\n");
}
ListBox1.ToolTip = str.ToString().TrimEnd('\n');
}
base.OnPreRender(e);
HtmlForm form = this.Page.Form;
if ((form != null) && (form.Enctype.Length == 0))
{
form.Enctype = "multipart/form-data";
}
}
void Upload_ServerClick(object sender, EventArgs e)
{
string baseLocation = _UpLoadPath;
string status = "";
if ((ListBox1.Items.Count == 0) && (filesUploaded == 0))
{
lblError.Text = "错误 - 请先选择一个要上传的文件.";
return;
}
else
{
foreach (System.Web.UI.HtmlControls.HtmlInputFile HIF in hif)
{
try
{
string fn = System.IO.Path.GetFileName(HIF.PostedFile.FileName);
HIF.PostedFile.SaveAs(baseLocation + fn);
filesUploaded++;
status += fn + "<br>";
}
catch (Exception err)
{
lblError.Text += "保存文件到:“ " + baseLocation + "”出错<br>错误描述:" + err.ToString();
}
}
if (filesUploaded == hif.Count)
{
lblError.Text += string.Format("{0}文件已经上传成功<br>{1}", filesUploaded, status);
}
hif.Clear();
ListBox1.Items.Clear();
}
}
void RemvFile_Click(object sender, EventArgs e)
{
if (ListBox1.Items.Count != 0)
{
hif.RemoveAt(ListBox1.SelectedIndex);
ListBox1.Items.Remove(ListBox1.SelectedItem.Text);
}
}
void AddFile_Click(object sender, EventArgs e)
{
if (Page.IsPostBack == true)
{
if (string.IsNullOrEmpty(FindFile.PostedFile.FileName))
{
lblError.Text += "请选择要添加的文件!";
return;
}
foreach (ListItem li in ListBox1.Items)
if (li.Text == FindFile.PostedFile.FileName)
{
lblError.Text += "文件已经加入到上载列表中,请不要重复加载!";
return;
}
hif.Add(FindFile);
ListBox1.Items.Add(FindFile.PostedFile.FileName);
}
else
{
}
}
public void Clear()
{
hif.Clear();
// ListBox1.Items.Clear();
}
}
}
浙公网安备 33010602011771号