您的位置:首页 > 其它

文件上传:验证文件真实类型并返回文件路径

2011-11-02 14:59 399 查看
两个类文件:

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为服务器控件 "."相对路径
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: