该控件实用方法:
| c:programe/... | {浏览} {上传}
页面html:
<%@ Register Src="~/webControl/FilesUpLoad.ascx" TagName="FilesUpLoad" TagPrefix="uc1" %>
<uc1:FilesUpLoad ID="FilesUpLoad1" runat="server" FileSize="200" FileType="jpg|gif|jpeg" IsAutoName="true" MIME="" SaveDirectory="upload/tempPhoto/" />
后台代码:
protected void butUp_Click(object sender, EventArgs e)
{
url = string.Empty;
string info = this.FilesUpLoad1.UpSave(out url);
//文件上传成功(临时文件夹)
if (info == "true")
{}
else
{}
}
控件FilesUpLoad.ascx
| c:programe/... | {浏览}
页面htm:
<asp:FileUpload ID="FileUp" style="border:solid #7e9db9 1px;" runat="server" />
<script type="text/javascript">
//检查即将上传的文件是否合法
function <%=ClientId %>isUpPass()
{
var FileUpID = "<%=ClientId %>"; //取客户端该服务器控件的ID,其在html上显示的ID实际是FilesUpLoad1_FileUp,不是FilesUpLoad1
var FileName = document.getElementById(FileUpID).value; //取要上传的文件全路径名
var LastIndex = FileName.lastIndexOf("."); //找文件最后的.号的索引位置
if(LastIndex>0) //存在.号
{
var Extension = FileName.substring(LastIndex+1).toLowerCase();
var FileType="<%=FileType %>"; //允许上传文件的后缀名
var ExtensionName = new Array();
ExtensionName = FileType.toLowerCase().split("|");
//检索在允许上传文件类型的数组中有无该后缀
for(var temp in ExtensionName)
{
//有返回true
if(ExtensionName[temp]==Extension)
{
return true;
}
}
alert("你上传的文件格式不正确!只能上传"+FileType+"的格式文件");
return false;
}
alert("请正确选择你要上传的文件!");
return false;
}
</script>
后台代码:
#region 成员
private string fileType; //限制上传文件的类型(如:jpg|gif|png)
private string mime = ""; //限制上传文件的MIME信息(如:image/jpeg|image/gif|image/png)
private int fileSize = 20; //限制上传文件的大小(以K为单位)
private string saveDirectory = "uploadfile"; //上传文件的保存文件夹(如:upfile/)
private string name = DateTime.Now.ToString("T").Replace(":","") + DateTime.Now.ToString("ffff"); //上传文件保存后的文件名称
private string fileResult = string.Empty; //上传文件的结果(成功还是失败,以及失败原因)
private bool isAutoName = false; //是否更新上传文件的名称
private string filePath = string.Empty; //文件上传后的网络地址
/// <summary>
/// 获得FileUpLoad的客户端ID
/// </summary>
public string ClientId
{
get { return FileUp.ClientID; }
}
/// <summary>
/// 限制上传文件的类型(如:jpg|gif|png)
/// </summary>
public string FileType
{
set { fileType = value.ToLower(); }
get { return fileType; }
}
/// <summary>
/// 限制上传文件的MIME信息(如:image/jpeg|image/gif|image/png)
/// </summary>
public string MIME
{
set { mime = value.ToLower(); }
get { return mime; }
}
/// <summary>
/// 限制上传文件的大小(以K为单位)
/// </summary>
public int FileSize
{
set { fileSize = value; }
get { return fileSize; }
}
/// <summary>
/// 上传文件的保存文件夹(如:uploadfile/pic/)
/// </summary>
public string SaveDirectory
{
set { saveDirectory = value; }
get { return saveDirectory; }
}
/// <summary>
/// 上传文件保存后的文件名称
/// </summary>
public string Name
{
set { name = value; }
get { return name; }
}
/// <summary>
/// 上传文件的结果(成功还是失败,以及失败原因)
/// </summary>
public string FileResult
{
get { return fileResult; }
}
/// <summary>
/// 文件上传后的网络地址
/// </summary>
public string FilePath
{
get { return filePath; }
}
/// <summary>
/// 是否更新上传文件的名称(更新后以上传时间命名)
/// </summary>
public bool IsAutoName
{
set { isAutoName = value; }
}
#endregion
#region 私有方法
/// <summary>
/// 验证上传文件的类型是否合法
/// </summary>
/// <param name="ExtensionName">扩展名(如:"jpg")</param>
/// <param name="Mime">MIME信息(如:"image/jpeg")</param>
/// <returns></returns>
private bool ValidateFileType(string ExtensionName, string Mime)
{
string[] extensionArray = fileType.Split('|');
if (extensionArray.Length==0)
{
return true;
}
foreach (string tempExtensionName in extensionArray)
{
if (tempExtensionName.Trim() == ExtensionName)
{
char[] fg = { '|'};
string[] mimeArray = mime.Split(fg, StringSplitOptions.RemoveEmptyEntries);
if (mimeArray.Length > 0)
{
foreach (string tempMime in mimeArray)
{
if (tempMime.Trim() == Mime)
{
return true;
}
}
}
else
{
return true;
}
}
}
return false;
}
/// <summary>
/// 验证文件大小
/// </summary>
/// <param name="ContentLength">文件长度(以B为单位)</param>
/// <returns></returns>
private bool ValidateFileSize(int ContentLength)
{
if (ContentLength != 0)
{
if ((ContentLength / 1024) <= fileSize)
{
return true;
}
return false;
}
return false;
}
#endregion
#region 共有方法
/// <summary>
/// 上传保存文件
/// </summary>
/// <param name="fileURL">可以得到文件上传后的网络地址</param>
/// <returns>返回文件上传后的状态字符串(上传成功返回true字符串,不成功直接返回失败原因)</returns>
public string UpSave(out string fileURL)
{
string ServerPath = Request.ServerVariables["APPL_PHYSICAL_PATH"].ToString(); //获取虚拟服务绝对路径
fileURL = ""; //记录上传文件相对地址
int fileLength = FileUp.PostedFile.ContentLength;
if (!FileUp.HasFile)
{
return "失败原因:请没有选择上传文件!";
}
if (!ValidateFileSize(fileLength))
{
return "失败原因:你上传的文件太大了,只能上传" + fileSize + "K的文件,而你现在上传的文件有" + (fileLength / 1024).ToString() + "K";
}
string _name = FileUp.PostedFile.FileName.ToLower();
_name = _name.Substring(_name.LastIndexOf('//') + 1);
string ExtensionName = _name.Substring(_name.LastIndexOf('.') + 1); //得到后缀名
string Mime = FileUp.PostedFile.ContentType.ToLower(); //得到文件的MIME文件类型
if (!ValidateFileType(ExtensionName, Mime))
{
return "失败原因:你上传的文件类型错误,只能上传后缀名为"+fileType+"类型的文件。";
}
//得到文件名
DateTime time = DateTime.Now;
if (!isAutoName) //是否跟文件换名字
{
name = _name ; //不换名字
}
else
{
name = name + "." + ExtensionName; //换名字
}
//得到组合路径
string AppPath = "";
if (Request.ApplicationPath == null || Request.ApplicationPath == "/")
//直接安装在 Web 站点
AppPath = "";
else
//安装在虚拟子目录下
AppPath = Request.ApplicationPath;
string path = saveDirectory + time.ToString("yyyy") + "//" + time.ToString("MM") + time.ToString("dd") + "//";
//得到文件存放地址
string PathSave = ServerPath + path;
//创建目录
if (!System.IO.Directory.Exists(PathSave))
{
System.IO.Directory.CreateDirectory(PathSave);
}
//保存文件
try
{
string temp = PathSave + name; //保存文件的绝对路径
FileUp.PostedFile.SaveAs(ServerPath + path + name);
fileURL = AppPath+"/"+path.Replace("//", "/") + name;
return "true";
}
catch (Exception ex)
{
return "失败原因:" + ex.Message + "。";
}
}
#endregion