

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.IO;
#region FileUploader
/// <summary>
/// FileUp 功能:上传文件类
/// 调用GetSavFileName(Page p, FileUpload fileUpload)这个方法可以得到上传文件后的新文件名
/// </summary>
public class FileUploader
{
private string _UploadPath = "UploadFiles";//文件上传默认目录Upload
private bool _IsRename = true;//文件上传默认重命名文件
private string _Prefix = "";//文件上传默认无前缀
private bool _ReWrite = true;//同名文件是否重写
private string _FileType = ".jpg.png.gif.bmp.txt.rar.zip.ppt.doc.swf.xls";//文件类型
private string _ErrorMessage = "";
private int _FileContentLength = 1024000;//上载文件大小
/// <summary>
/// 初始化FileUp文典专用上传类实例.
/// </summary>
public FileUploader()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region FileUp的属性
/// <summary>
/// 属性:获取或设置文件上传目录,指定文件上传目录,目录为相对根目录,前后不用加"/",默认目录为UploadPath.
/// 例:FileUp.UploadPath="xxxx",则表示上传到根目录下的xxxx活页夹下.
/// </summary>
/// <example>例:FileUp.UploadPath="xxxx",则表示上传到根目录下的xxxx活页夹下</example>
public string UploadPath
{
get { return _UploadPath; }
set { _UploadPath = value; }
}
/// <summary>
/// 属性:获取或设置文件是否允许重命名,默认为true
/// </summary>
public bool IsRename//上传文件是否重命名
{
get { return _IsRename; }
set { _IsRename = value; }
}
/// <summary>
/// 属性:获取或设置文件前缀,保存在服务器上的文件名的前缀,只有当允许重命名时才有效,这是为了标识文件和减少重复而作的.
/// 例:FileUp.Prefix="xxx",那么上传后得到的文件名形如"xxx_200708112222.jpg"
/// </summary>
public string Prefix
{
get { return _Prefix; }
set { _Prefix = value; }
}
/// <summary>
///属性:设置或获取是否同名覆盖,当上传目录已经存在同名文件时,是否允许覆盖,默认true,如果不允许覆则产后错误讯息.
/// </summary>
public bool ReWrite
{
get { return _ReWrite; }
set { _ReWrite = value; }
}
/// <summary>
/// 属性:设置或获取上传文件的格式,由文件属性所组成的字符串,如".jpg.bmp.txt" 默认值".jpg.png.gif.bmp.txt.rar.zip.ppt.doc.swf"
/// </summary>
public string FileType
{
get { return _FileType; }
set { _FileType = value; }
}
/// <summary>
/// 属性:获取错误讯息,该属性为只读.
/// </summary>
public string ErrorMessage
{
get { return _ErrorMessage; }
}
/// <summary>
/// 属性:上传文件的最大字节数
/// </summary>
public int FileContentLength
{
get { return _FileContentLength; }
set { _FileContentLength = value; }
}
#endregion FileUp的属性
#region FileUp的附加方法
/// <summary>
/// 方法:根据文件名产生由年月日+guid,加文件属性所产生的新文件名.
/// </summary>
/// <param name="FileName">原文件名,例:"xxx.jpg"</param>
/// <returns></returns>
private string GetNewFileName(string FileName)
{//跟据文件名产生一个由时间(年月日+guid)+文件后缀组成的新文件名
string newfilename = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString()
+ DateTime.Now.Day.ToString() + Guid.NewGuid().ToString()
+ FileName.Substring(FileName.LastIndexOf("."), FileName.Length - FileName.LastIndexOf("."));
return newfilename;
}
#endregion FileUp的附加方法
#region GetSavFileName
/// <summary>
/// 方法:上传文件并返回上传到服务器后的文件名
/// </summary>
/// <param name="p">操作所在页</param>
/// <param name="fileUpload">提供文件上传的窗体控件FileUpload</param>
/// <returns>返回上传后的文件名</returns>
public string GetSavFileName(Page p, FileUpload fileUpload)
{
return GetSavFileName(p, fileUpload, null);
}
/// <summary>
/// 方法:上传文件并返回上传到服务器后的文件名
/// </summary>
/// <param name="p">操作所在页</param>
/// <param name="fileUpload">提供文件上传的窗体控件FileUpload</param>
/// <param name="mark_">文件前缀,保存在服务器上的文件名的前缀,只有当允许重命名时才有效</param>
/// <returns>返回上传后的文件名</returns>
public string GetSavFileName(Page p, FileUpload fileUpload, string mark_)
{//根据上传页面,上传控件,文件标识,返回上传后新文件的名称
string newfilename = "";
string markx;
if (mark_ == null)
{
markx = Prefix;
}
else
{
markx = mark_;
}
if (fileUpload.HasFile)//如果控件含有文件
{
//if(fileUpload.PostedFile.ContentLength>p.
string fileExt = System.IO.Path.GetExtension(fileUpload.FileName);
if (FileType.IndexOf(fileExt.ToLower()) < 0)//判断上传文件格式是否在许可范围
{
_ErrorMessage = "上传失败: 不允许上传(" + fileExt + ")这类文件,只能上传(" + FileType + ")类文件";
}
else
{
if (fileUpload.PostedFile.ContentLength > FileContentLength)
{
_ErrorMessage = "上传失败: 你上传的文件大小已经超过限制!";
}
else
{
try
{
//产生新的文件名
if (IsRename)//如果允许重命名则产生文件名
{
newfilename = markx + "_" + GetNewFileName(fileUpload.FileName.ToString());
}
else//不允许重命名产生文件名
{
newfilename = fileUpload.FileName.ToString();
}
//判断是否存在上传目录,如果不存在则创建该目录
if (Directory.Exists(p.Server.MapPath("~/" + UploadPath)) == false)
{
try
{
Directory.CreateDirectory(p.Server.MapPath("~/" + UploadPath));
}
catch (Exception ex)
{
_ErrorMessage = "上传失败:" + ex.Message.ToString();
}
}
if (ReWrite)
{
try
{
fileUpload.SaveAs(p.Server.MapPath("~/" + UploadPath + "/" + newfilename));
}
catch (Exception ex)
{
_ErrorMessage = "上传失败:" + ex.Message.ToString();
}
}
else
{
//如果上传文件名已经存在
if (File.Exists(p.Server.MapPath("~/" + UploadPath + "/" + newfilename)) == false)
{
try
{
fileUpload.SaveAs(p.Server.MapPath("~/" + UploadPath + "/" + newfilename));
}
catch (Exception ex)
{
_ErrorMessage = ex.Message;
}
}
else
{
_ErrorMessage = "上传失败: 存在同名文件" + newfilename + "!";
}
}
}
catch (Exception ex)
{
_ErrorMessage = "上传失败: " + ex.Message.ToString();
}
}
}
}
return newfilename;
}
/// <summary>
/// 方法:上传文件并返回上传到服务器后的文件名
/// </summary>
/// <param name="p">操作所在页</param>
/// <param name="fileUpload">提供文件上传的窗体控件FileUpload</param>
/// <returns>返回上传后的文件名</returns>
public string GetSavFileName(Page p, HtmlInputFile fileUpload)
{
return GetSavFileName(p, fileUpload, null);
}
/// <summary>
/// 方法:上传文件并返回上传到服务器后的文件名
/// </summary>
/// <param name="p">操作所在页</param>
/// <param name="fileUpload">提供文件上传的窗体控件FileUpload</param>
/// <param name="mark_">文件前缀,保存在服务器上的文件名的前缀,只有当允许重命名时才有效</param>
/// <returns>返回上传后的文件名</returns>
public string GetSavFileName(Page p, HtmlInputFile fileUpload, string mark_)
{//根据上传页面,上传控件,文件标识,返回上传后新文件的名称
string newfilename = "";
string markx;
if (mark_ == null)
{
markx = Prefix;
}
else
{
markx = mark_;
}
if (fileUpload.PostedFile != null)//如果控件含有文件
{
//if(fileUpload.PostedFile.ContentLength>p.
string fileExt = System.IO.Path.GetExtension(fileUpload.PostedFile.FileName);
if (FileType.IndexOf(fileExt.ToLower()) < 0)//判断上传文件格式是否在许可范围
{
_ErrorMessage = "上传失败: 不允许上传(" + fileExt + ")这类文件,只能上传(" + FileType + ")类文件";
}
else
{
if (fileUpload.PostedFile.ContentLength > FileContentLength)
{
_ErrorMessage = "上传失败: 你上传的文件大小已经超过限制!";
}
else
{
try
{
//产生新的文件名
if (IsRename)//如果允许重命名则产生文件名
{
newfilename = markx + "_" + GetNewFileName(fileUpload.PostedFile.FileName.ToString());
}
else//不允许重命名产生文件名
{
newfilename = System.IO.Path.GetFileName(fileUpload.PostedFile.FileName);
}
//判断是否存在上传目录,如果不存在则创建该目录
if (Directory.Exists(p.Server.MapPath("~/" + UploadPath)) == false)
{
try
{
Directory.CreateDirectory(p.Server.MapPath("~/" + UploadPath));
}
catch (Exception ex)
{
_ErrorMessage = "上传失败:" + ex.Message.ToString();
}
}
if (ReWrite)
{
try
{
fileUpload.PostedFile.SaveAs(p.Server.MapPath("~/" + UploadPath + "/" + newfilename));
}
catch (Exception ex)
{
_ErrorMessage = "上传失败:" + ex.Message.ToString();
}
}
else
{
//如果上传文件名已经存在
if (File.Exists(p.Server.MapPath("~/" + UploadPath + "/" + newfilename)) == false)
{
try
{
fileUpload.PostedFile.SaveAs(p.Server.MapPath("~/" + UploadPath + "/" + newfilename));
}
catch (Exception ex)
{
_ErrorMessage = ex.Message;
}
}
else
{
_ErrorMessage = "上传失败: 存在同名文件" + newfilename + "!";
}
}
}
catch (Exception ex)
{
_ErrorMessage = "上传失败:" + ex.Message.ToString();
}
}
}
}
return newfilename;
}
#endregion GetSavFileName
}
#endregion
调用:


//web上传控件
protected void Button1_Click(object sender, EventArgs e)
{
FileUploader fup = new FileUploader();
fup.IsRename = false;
fup.ReWrite = false;
string str = fup.GetSavFileName(this.Page, FileUpload1);
if (!string.IsNullOrEmpty(fup.ErrorMessage))
{
Response.Write(fup.ErrorMessage);
}
else
{
Response.Write("文件" + str + "成功上传到"+fup.UploadPath+"目录下!");
}
}
//HTML上传控件
protected void Button2_Click(object sender, EventArgs e)
{
FileUploader fup = new FileUploader();
fup.IsRename = false;
fup.ReWrite = false;
fup.FileType = ".chm";
fup.
string str = fup.GetSavFileName(this.Page,File1);
if (!string.IsNullOrEmpty(fup.ErrorMessage))
{
Response.Write(fup.ErrorMessage);
}
else
{
Response.Write("文件" + str + "成功上传到" + fup.UploadPath + "目录下!");
}
}