C# 文件上传类

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;

namespace Web
{
	/// <summary>
	/// 单文件上传类 (暂时不支持多文件上传)
	/// </summary>
	public class UploadFile
	{
		/// <summary>
		/// 上传文件信息 (动态数组)
		/// </summary>
		public Dictionary<string, dynamic> FileInfo = new Dictionary<string, dynamic>();

		/// <summary>
		/// 最大文件大小
		/// </summary>
		public int FileSize = 10240;

		/// <summary>
		/// 文件保存路径
		/// </summary>
		public string FilePath = "/Upload";

		/// <summary>
		/// 允许上传的文件类型, 逗号分割,必须全部小写!
		/// 
		/// 格式: ".gif,.exe" 或更多
		/// </summary>
		public string FileType = ".jpg,.gif,.png,.bmp";

		/// <summary>
		/// 上传错误
		/// </summary>
		public bool Error;

		/// <summary>
		/// 消息
		/// </summary>
		public string Message;

		/// <summary>
		/// 保存文件
		/// </summary>
		/// <param name="FormField">表单文件域名称</param>
		public void Save(string FormField)
		{
			var Response = HttpContext.Current.Response;
			var Request = HttpContext.Current.Request;

			// 获取上传的文件
			HttpFileCollection File = Request.Files;
			HttpPostedFile PostFile = File[FormField];

			// 验证格式
			this.CheckingType(PostFile.FileName);

			// 获取存储目录
			var Path = this.GetPath();
			var dir = Path + this.FileInfo["Name"];

			// 注册文件信息
			this.FileInfo.Add("path", Path + this.FileInfo["Name"]);
			this.FileInfo.Add("filepath", this.FileInfo["dir"] + this.FileInfo["Name"]);

			// 保存文件
			PostFile.SaveAs(dir);
		}

		/// <summary>
		/// 获取目录
		/// </summary>
		/// <returns></returns>
		private string GetPath()
		{
			// 存储目录
			string Path = this.FilePath;

			// 目录格式
			string Date = DateTime.Now.ToString("yyyy-MM/dd");
			string dir = HttpContext.Current.Server.MapPath(Path + "/" + Date);

			// 注册文件信息
			this.FileInfo.Add("dir", Date + '/');

			// 创建目录
			if(Directory.Exists(dir) == false)
				Directory.CreateDirectory(dir);
			return dir + '/';
		}

		/// <summary>
		/// 验证文件类型
		/// </summary>
		/// <param name="FileName"></param>
		private void CheckingType(string FileName)
		{
			// 获取允许允许上传类型列表
			string[] TypeList = this.FileType.Split(',');

			// 获取上传文件类型(小写)
			string Type = Path.GetExtension(FileName).ToLowerInvariant();
			string Name = Path.GetFileNameWithoutExtension(FileName);
			string NameHash = Name.GetHashCode().ToString();

			// 注册文件信息
			this.FileInfo.Add("name", Name);
			this.FileInfo.Add("Name", MD5.Encrypt(NameHash) + Type);
			this.FileInfo.Add("type", Type);

			// 验证类型
			if(TypeList.Contains(Type) == false)
				this.TryError("文件类型非法!");
		}

		/// <summary>
		/// 抛出错误
		/// </summary>
		/// <param name="Msg"></param>
		public void TryError(string Msg)
		{
			this.Error = true;
			this.Message = Msg;
		}
	}
}

 

用法: 

var Upload = new UploadFile();
Upload.Save("file");
if(Upload.Error) {
	Response.Write(Upload.Message);
} else {
	Response.Write(Upload.FileInfo["filepath"]);
	Response.Write("上传成功!");
}

转载请注明来源!

转载于:https://my.oschina.net/midnight/blog/17501

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值