zoukankan      html  css  js  c++  java
  • C# 文件上传类

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Web;
    
    namespace Web
    {
    	/// <summary>
    	/// 单文件上传类 (暂时不支持多文件上传)
    	/// yangyunzhou@foxmail.com
    	/// </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("上传成功!");
    }
    
    转载请注明来源!
  • 相关阅读:
    空间换时间之反范式设计之路/合理冗余/去除外键
    WebAPI接口设计:SwaggerUI文档 / 统一响应格式 / 统一异常处理 / 统一权限验证
    开放api接口签名验证
    EasyUI开发踩过的坑(EasyUI开发笔记)
    nuget挂了吗?
    C# 实体/集合差异比较,比较两个实体或集合值是否一样,将实体2的值动态赋值给实体1(名称一样的属性进行赋值)
    从应用的角度讲创业公司该如何选择域名?
    疑似easyui本身bug:easyui时间控件问题,试了几个版本都不行
    工作三年对程序的理解特来求证
    控制器读取视图表单中的数据的几种方式
  • 原文地址:https://www.cnblogs.com/yangyunzhou/p/2063316.html
Copyright © 2011-2022 走看看