ASP.NET 2.0(C#)实现多文件上传

发布时间:2016-12-8 4:09:59 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"ASP.NET 2.0(C#)实现多文件上传",主要涉及到ASP.NET 2.0(C#)实现多文件上传方面的内容,对于ASP.NET 2.0(C#)实现多文件上传感兴趣的同学可以参考一下。

(原)ASP.NET 2.0(C#)实现多文件上传 作者: zyf0808 发表日期: 2006-08-27 16:40 文章属性: 原创 复制链接       用户控件的使用可以大大提高程序的开发进度,同时,也使代码规范整洁,程序结构清晰。本文基于实际项目,实现了一个多文件上传的用户控件。下面先简单描述一下控件的功能: 1、可以实现多文件上传,可控制上传数量,可以添加文件的描述;2、可以控制上传文件的格式类型,通过设置不同的格式类型,可以实现多图片的上传、多文件的上传、多视频的上传;当然,你也可以混合上传;3、上传的文件即可显示在列表中,可以查看图片及删除上传的图片; 控件外观如下:控件外观       因项目基于分层模式,所以控件的实现也是在common层定义了一个DataSet——ImageData,下面是部分其代码:public class ImagesData : DataTable    {        //你还可以添加其他文件信息,这里文件的保存格式为:url+info;url+info;...        public const string URL_FIELD = "URL_FIELD";        public const string INFO_FIELD = "INFO_FIELD";         private ImagesData(SerializationInfo info, StreamingContext context)            : base(info, context)          {           }           public ImagesData()        {            this.Columns.Add(new DataColumn(URL_FIELD, typeof(System.String)));            this.Columns.Add(new DataColumn(INFO_FIELD,typeof(System.String)));        }         public void FillImageDataSet(string images, ImagesData imageData)        {            if (images == null || images.Trim().Length == 0)            {                return;            }            string[] items = images.Split(new char[1] { ';' }, StringSplitOptions.RemoveEmptyEntries);            string[] url_info = null;            foreach (string item in items)            {                DataRow dr = imageData.NewRow();                url_info = item.Split(':');                dr[URL_FIELD] = url_info[0];                dr[INFO_FIELD] = url_info[1];                imageData.Rows.Add(dr);            }        }                 public void AppendImageChunk(StringBuilder sb,string url,string info)        {            if (sb.Length != 0)            {                sb.Append(";");            }            sb.Append(url).Append(":").Append(info);        }    }} 下面介绍控件wucMultiFileUpload的实现:    public const string IMAGES_TABLE = "IMAGES_TABLE";    private StringBuilder images = new StringBuilder();//路径属性值:url+info    bool enabled = true;    private string attachmentDir = "";  //上传路径设定    private int number = 0;  //允许上传的数量    private string format = "";  //允许上传的文件格式类型;空为不限制实现原理:    上传时先判断上传文件的类型,如果,控件设定属性时,允许上传该格式的文件,则上传,同时开始计数,只有当文件类型允许上传且上传数量没有超过限定数量时,才允许上传文件,否则,提示出错信息。    每上传一次图片, 通过  ViewState[IMAGES_TABLE] = imageData 保持已上传的图片,并在 DataList 中显示。    DataList中,显示了对文件的描述信息和一个删除按钮。描述信息是一个HyperLink,连接到文件;删除按钮通过绑定文件的url值来删除文件。附部分关键代码如下:     private void BindImages(string imageValues)    {        if (imageValues.Equals(String.Empty))            return;         ImagesData imageData = new ImagesData();        imageData.FillImageDataSet(imageValues, imageData);         dlAttachments.DataSource = imageData;        dlAttachments.DataBind();    }    protected void btUpload_Click(object sender, EventArgs e)    {        int num =0;  //已经上传的数量        if (ViewState["num"] != null)            num = (int)ViewState["num"];         //实现上传,同时,将路径拼好,存在images中        if (fuUpload.FileName == null || fuUpload.FileName.Length == 0 || fuUpload.FileContent == null)        {            return;        }        if (number != 0)  //number == 0 无数量限制        {            if ( ViewState["num"]!= null && (int)ViewState["num"] >= number )            {                lbMessage.Text = "已经达到上传最大数量!";                return;            }        }        if (ValidFormat(GetExtendName(fuUpload.FileName)))        {            ImagesData imagesTable = (ImagesData)ViewState[IMAGES_TABLE];            if (imagesTable != null && imagesTable.Rows.Count > 0)            {                foreach (DataRow dr in imagesTable.Rows)                {                    images.Append(dr[ImagesData.URL_FIELD].ToString());                    images.Append(":");                    images.Append(dr[ImagesData.INFO_FIELD].ToString());                    images.Append(";");                }            }            //upload            Random random = new Random();            String fileName = GetFitTimeString() + random.Next().ToString() + "." + GetExtendName(fuUpload.FileName);            string url = attachmentDir + "//" + fileName;            string info = tbInfo.Text.Trim();            try            {                fuUpload.SaveAs(Server.MapPath(url));                num++;                ViewState["num"] = num;            }            catch            {             }            //the value stored to db            images.Append(url);            images.Append(":");            images.Append(info);            images.Append(";");            ViewState["images"] = images;            Images = images.ToString();             tbInfo.Text = "";            lbMessage.Text = "";        }    }    protected void lbDelAttachment_Click(object sender, EventArgs e)    {        try        {            LinkButton lb = (LinkButton)sender;            string url = lb.CommandArgument.Trim();            StringBuilder sb = new StringBuilder();            ImagesData imageTable = (ImagesData)ViewState[IMAGES_TABLE];            foreach (DataRow dr in imageTable.Rows)            {                string rowUrl = dr[ImagesData.URL_FIELD].ToString();                string rowInfo = dr[ImagesData.INFO_FIELD].ToString();                if (!rowUrl.Equals(url))                {                    sb.Append(rowUrl).Append(":").Append(rowInfo).Append(";");                                    }                else                {                    File.Delete(Server.MapPath(url));                 }            }            ViewState["images"] = sb;            Images = sb.ToString();        }        catch (Exception ex)        {            lbMessage.Text = ex.Message;        }    } 如有需要的朋友可以联系偶,偶可以发给你代码。浅薄之处,请指教。  

上一篇:Asp.net 2.0 用 FileUpload 控件实现多文件上传 用户控件(示例代码下载)
下一篇:使用 AppFuse 的七个理由之二

相关文章

相关评论