两个类文件:
Adm_FileUpload.cs
//*****************************************************
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;
using System.Globalization;
/// <summary>
/// Adm_FileUpload 的摘要说明
/// </summary>
public class Adm_FileUpload
{
public Adm_FileUpload()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public static string FileUpload(FileUpload fu,string path)
{
if (fu.FileName != "")
{
bool Flag = false;
string Path = HttpContext.Current.Server.MapPath(path);
int FileSize = Convert.ToInt32(ConfigurationManager.AppSettings["UploadSize"].ToString());//web.config 数字
string ext = fu.FileName.Substring(fu.FileName.LastIndexOf('.')).ToLower();
if (fu.PostedFile.ContentLength / 1024 > FileSize)
{
return "上传文件超过限制的" + FileSize + "KB";
}
//验证上传文件类型是否合法
Flag = CheckFileType.IsAllowedExtension(fu.PostedFile);
if (!Flag)
{
return "上传文件类型不合法!";
}
string NewFileName = FormatDateTime(DateTime.Now);
string Folder = NewFileName.Substring(0, 6);
Path += "\\uploadfile\\" + Folder;
//创建目录
if (!Directory.Exists(Path))
{
Directory.CreateDirectory(Path);
}
fu.SaveAs(Path + "\\" + NewFileName + ext);
return "uploadfile/" + Folder + "/" + NewFileName + ext;
}
else
return "请选择文件";
}
/// <summary>
/// 日期格式化,返回格式为yyyyMMddHHmmss
/// </summary>
/// <param name="dt">日期型</param>
/// <returns>yyyyMMddHHmmss</returns>
public static string FormatDateTime(DateTime dt)
{
return dt.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
}
}
CheckFileType.cs
//*****************************************************
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;
/// <summary>
/// CheckFileType 的摘要说明
/// </summary>
public class CheckFileType
{
public CheckFileType()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public static bool IsAllowedExtension(HttpPostedFile hifile)
{
bool ret = false;
System.IO.FileStream fs = new System.IO.FileStream(hifile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
string fileclass = "";
byte buffer;
try
{
buffer = r.ReadByte();
fileclass = buffer.ToString();
buffer = r.ReadByte();
fileclass += buffer.ToString();
}
catch
{
return false;
}
r.Close();
fs.Close();
string[] fileExt = { "gif", "jpg", "jpeg", "png", "bmp", "txt", "aspx", "asp", "sql", "xls", "doc", "ppt", "xml", "htm", "html", "js", "xlsx", "zip", "pptx", "zip", "rar", "mdb", "exe", "dll", "psd", "bat" };
String[] fileCode = { "7173", "255216", "255216", "13780", "6677", "239187", "239187", "239187", "239187", "208207", "208207", "208207", "6063", "6033", "6033", "4742", "8075", "8075", "8075", "8075", "8297", "01", "7790", "7790", "5666", "64101" };
String[] fileType = { };//存储允许上传文件类型对应编码
//获取允计上传文件类型
string FileTypeStr = ConfigurationManager.AppSettings["UploadFileType"].ToString();//web.config 格式:gif,jpeg,jpg,png
string[] A_FileType = FileTypeStr.Split(new char[] { ',' });
for (int i = 0; i < fileExt.Length; i++) {
for (int j = 0; j < A_FileType.Length; j++) {
if (fileExt[i].ToLower() == A_FileType[j].ToLower()) {
fileType = ArrayResize(fileType, fileCode[i]);
break;
}
}
}
for (int i = 0; i < fileType.Length; i++)
{
if (fileclass == fileType[i])
{
ret = true;
break;
}
}
return ret;
}
/// <summary>
/// 对数组进行重建并添加新值
/// </summary>
/// <param name="OldArray">原数组(string[])</param>
/// <param name="NewValue">要添加的值</param>
/// <returns>新数组(string[])</returns>
public static string[] ArrayResize(string[] OldArray, string NewValue) {
if (NewValue != "")
{
Array.Resize(ref OldArray, OldArray.Length + 1);
OldArray[OldArray.Length - 1] = NewValue;
}
return OldArray;
}
}
调用方法:
string filepath = Adm_FileUpload.FileUpload(fileupload1,".");//fileupload1为服务器控件 "."相对路径