文件上传:验证文件真实类型并返回文件路径
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为服务器控件 "."相对路径
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为服务器控件 "."相对路径
相关文章推荐
- 文件上传:验证文件真实类型并返回文件路径
- js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中
- 上传文件类型验证正则表达式
- JavaScript验证上传文件大小和类型
- MIME类型-服务端验证上传文件的类型的讨论
- FileUpload控件文件上传、扩容、限制文件类型及上传验证
- 用正则表达式验证控件过滤fileupload控件上传文件类型收藏
- 获取指定路径下指定类型的文件名称,并返回可用的新名称
- webuploader上传文件,含文件大小、类型验证
- 关于post文件上传不能返回路径问题的解决方案
- <input type="file">定义样式并获取上传文件路径及指定文件类型
- IE使用ajaxFileUpload上传文件后台返回json类型前台弹出下载提示框
- 使用 js 获得上传文件的真实路径 chrome 浏览器 除外
- 上传文件时JS验证文件类型
- MIME类型-服务端验证上传文件的类型
- <input type="file">定义样式并获取上传文件路径及指定文件类型
- asp.net上传文件使用fileupload控件,判断文件类型和大小,取得文件路径时报错【System.IO.FileNotFoundException:未能找到文件】的解决办法
- javascrip客户端验证文件大小及文件类型并重置上传
- 上传文件检测真实类型
- MVC文件上传01-使用jquery异步上传并客户端验证类型和大小