多文件上传(一个FileUpload 实现上传多个文件)

原创 2007年09月21日 16:01:00
          写一个表示文件的类(CustomFile)来保存上传文件的相关信息。
类定义,FileBytes是二进制文件的数据类型byte[],FileContentType文件MIME类型,FileSize文件的大小,FullFileName表示带路径的文件全名,最后还有一个SaveAs方法用来保存到服务器指定路径中。
接下来的事情就是要把CustomFile这个类的实例都保存到Cache中,以便以后一次全部上传到服务器。这样的工作笔者通过一个用户控件来实现,方便快捷。用户通过“浏览”选择本地文件,用“增加”把文件加载到指定Cache中,“删除”可以删除掉选择错的文件。
控件就一个最重要的对外属性GetFiles,通过这个方法可以获取保存在Cache中的CustomFile数(即表示多个上传文件)。
还有一个方法Clear是上传后来清空Cache的,非常重要一定要使用,否则还会继续上传上次已经传过的文件!!!
文件上传控件ID:FileUpload1
增加按钮ID:btnAdd
删除按钮ID:btnDelete
文件列表(ListBox控件)ID:LbFiles

using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;

/// <summary>
/// 自定义上传文件类
/// (可序列化)
/// </summary>
[Serializable]
public class CustomFile
{
    /// <summary>
    /// 文件全名(带路径)
    /// </summary>
    public string FullFileName = string.Empty;
    /// <summary>
    /// 文件名
    /// </summary>
    public string FileName = string.Empty;
    /// <summary>
    /// 文件大小
    /// </summary>
    public int FileSize = 0;
    /// <summary>
    /// 文件类型
    /// </summary>
    public string FileContentType = string.Empty;
    /// <summary>
    /// Byte数组
    /// </summary>
    public byte[] FileBytes = new byte[0];
    /// <summary>
    /// 保存文件到目录
    /// </summary>
    /// <param name="p_FullFileName">文件全名(带路径)</param>
    public void SaveAs(string p_FullFileName)
    {
        if (FileBytes.Length > 0)
        {
            System.IO.File.WriteAllBytes(p_FullFileName, FileBytes);
        }
    }
}

public partial class Default2 : System.Web.UI.Page
{

    /// <summary>

    /// 预先定义一个Cache名称

    /// </summary>

    private string _vName = "MyFile";

    private ArrayList _FileInfo = new ArrayList();

 

    private CustomFile Files
    {

        set
        {

            if (Cache["" + _vName + ""] != null)
            {

                _FileInfo = (ArrayList)Cache["" + _vName + ""];

            }

            else

                _FileInfo = new ArrayList();

            _FileInfo.Add(value);

 

            Cache["" + _vName + ""] = _FileInfo;

        }

    }

 

    /// <summary>

    /// 获取自定义上传文件类

    /// </summary>

    public CustomFile[] GetFiles
    {

        get
        {

            if (Cache["" + _vName + ""] != null)
            {

                _FileInfo = (ArrayList)Cache["" + _vName + ""];

            }

            else

                _FileInfo = new ArrayList();

            return (CustomFile[])_FileInfo.ToArray(typeof(CustomFile));

        }

    }

 

    /// <summary>

    /// 清除已经上载过的文件

    /// </summary>

    public void Clear()
    {

        Cache.Remove("" + _vName + "");

        LbFiles.Items.Clear();

    }

 

    /// <summary>

    /// 删除附件

    /// </summary>

    /// <param name="p_FileName">文件全名</param>

    private void DeleteFile(string p_FileName)
    {

        if (Cache["" + _vName + ""] != null)
        {

            for (int i = 0; i < GetFiles.Length; i++)
            {

                if (GetFiles[i].FullFileName == LbFiles.SelectedItem.Text)
                {

                    ((ArrayList)Cache["" + _vName + ""]).RemoveAt(i);

                }

            }

        }

    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Clear();
        }
    }
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        if (FileUpload1.PostedFile.FileName != "")
        {
            CustomFile _cf = new CustomFile();
            _cf.FileBytes = FileUpload1.FileBytes;
            _cf.FullFileName = FileUpload1.PostedFile.FileName;
            _cf.FileName = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName);
            _cf.FileSize = FileUpload1.PostedFile.ContentLength;
            _cf.FileContentType = FileUpload1.PostedFile.ContentType;
            Files = _cf;
            LbFiles.Items.Add(_cf.FileName);
        }
    }
    protected void btnDelete_Click(object sender, EventArgs e)
    {
        int ItemCount = LbFiles.Items.Count;
        for (int j = 0; j < ItemCount; j++)
        {
            for (int i = 0; i < LbFiles.Items.Count; i++)
            {
                if (LbFiles.Items[i].Selected)
                {
                    DeleteFile(LbFiles.Items[i].Text);
                    LbFiles.Items.Remove(LbFiles.Items[i]);
                }
            }
        }  
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        stringbind("111//222");
    }
    public bool stringbind(string filestringPath)         //文件上传方法
    {
        for (int i = 0; i < LbFiles.Items.Count; i++)
        {
            string fileName = LbFiles.Items[i].Text.ToString();
            //string fileName = LbFiles.Items[i].Value.Substring(LbFiles.Items[i].Value.LastIndexOf("//"));
            //string filesName = System.IO.Path.GetFileName(LbFiles.Items[i].Value.ToString());
            System.IO.Directory.CreateDirectory(Page.Server.MapPath(".") + "//" + filestringPath);
            for (int s = 0; s < GetFiles.Length; s++)
            {
                GetFiles[i].SaveAs(Page.Server.MapPath(".") + "//" + filestringPath + "//" + fileName);
            }
           
        }
        Clear();
        return true;
    } 

Spring文件上传,包括一次选中多个文件

Spring文件上传代码示例, 包括一次选中多个文件, 前端与后端代码处理
  • wanghailong_qd
  • wanghailong_qd
  • 2017年05月27日 09:14
  • 1824

文件上传,一次上传多个文件,判断文件是否为空

文件上传, 一次上传多个文件multiple属性,判断文件不为空的jquery写法: $("[input=type]").val() $("#uploadFile\Form").change...
  • IT429
  • IT429
  • 2016年11月13日 09:13
  • 1541

WEB版一次选择多个文件进行批量上传(Plupload)的解决方案

说明:Plupload支持多种浏览器,多种上传方式!       一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要把文件一个一个的...
  • z69183787
  • z69183787
  • 2015年06月30日 18:02
  • 3641

jquery 同时上传多个文件插件

  • 2010年05月17日 17:33
  • 217KB
  • 下载

在一个form表单里同时上传多个文件和文本信息的解决方案

  • 2013年06月07日 10:09
  • 157KB
  • 下载

Struts2之文件上传(单文件/多文件)

简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置, 指定用户上传文件的大小,有两种方式: 1)默认是在default.p...
  • hzc543806053
  • hzc543806053
  • 2012年05月02日 19:08
  • 51630

多文件上传(一个FileUpload 实现上传多个文件)

          写一个表示文件的类(CustomFile)来保存上传文件的相关信息。 类定义,FileBytes是二进制文件的数据类型byte[],FileContentType文件MIME类型,...
  • liuhuan2099
  • liuhuan2099
  • 2007年09月21日 16:01
  • 9373

WEB版一次选择多个文件进行批量上传(Plupload)的解决方案

原文链接 说明:Plupload支持多种浏览器,多种上传方式!       一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要...
  • xiakepan
  • xiakepan
  • 2015年05月12日 09:02
  • 3059

一次选择多个文件实现上传功能

  • 2013年05月20日 14:16
  • 3.71MB
  • 下载

fileupload实现多文件批量上传

前提条件: 需要如下架包:下面是maven的配置信息 commons-io commons-io 2.5 commons-fileupload commons-fileup...
  • fangchunlong
  • fangchunlong
  • 2016年07月07日 17:56
  • 12195
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多文件上传(一个FileUpload 实现上传多个文件)
举报原因:
原因补充:

(最多只允许输入30个字)