多文件上传(一个FileUpload 实现上传多个文件)
2007-09-21 16:01
381 查看
写一个表示文件的类(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;
}
类定义,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;
}
相关文章推荐
- commons-fileupload实现文件上传
- 使用FileUpload组件实现文件上传
- Struts2下使用Common-FileUpload实现文件上传
- 使用FileUpload组件实现文件上传
- MVC文件上传-使用jQuery.FileUpload和Backload组件实现文件上传
- FileUpload控件实现Ajax方式的文件上传
- 轻松实现一个页面多文件上传
- 使用ajaxFileupload实现多文件批量上传
- java文件上传--Apache Commons fileUpload实现文件上传
- 实现ASP.NET中FileUpload多文件上传
- 转 [JAVA] 使用 common-fileupload 实现文件上传
- commons-fileupload-1.2 实现文件上传
- commons-fileupload-1.2.1实现文件上传
- commons-fileupload实现文件上传,可以选择多文件
- 【转】commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar实现文件上传
- 使用commos-fileupload实现文件上传与下载
- ASP.NET(C#)FileUpload实现上传限定类型和大小的文件到服务器
- Apache Commons fileUpload实现文件上传
- JAVA学习提高之---- FileUpload组件实现多文件上传(JSP+SERVLET)实现
- Struts2文件上传之Servlet依赖fileupload组件实现