ASP.NET 文件上传类 简略好用
ASP.NET 文件上传类 简单好用
调用:
UploadFile uf = new UploadFile(); //参数设置 //uf.SetFilePath="" 设置保存路径,默认为upload //uf.SetFileType=".exe" 设置允许的后缀格式,默认为.pdf,.xls,.xlsx,.doc,.docx,.txt //uf.SetMaxSizeM=100 设置最大上传大小 默认10M //执行保存 uf.Save("file" /*input file 的 name */ , true); //true会自动处理同名文件,false则覆盖同名文件 //返回信息 var isError = uf.GetError;//判段是否上传成功 var webPath = uf.GetWebFilePath;//返回web路径 var response = uf.GetMessage;//返回上传信息 var filePath = uf.GetFilePath;//反回文件路径
代码:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Web; namespace SyntacticSugar { /// <summary> /// ** 描述:单文件上传类 (暂时不支持多文件上传) /// ** 创始时间:2015-5-27 /// ** 修改时间:- /// ** 作者:sunkaixuan /// </summary> public class UploadFile { /// <summary> /// 文件保存路径 /// </summary> public string SetFileDirectory { get; set; } /// <summary> /// 允许上传的文件类型, 逗号分割,必须全部小写! /// /// 格式: ".gif,.exe" 或更多 /// </summary> public string SetFileType { get; set; } /// <summary> /// 允许上传多少大小(单位:M) /// </summary> public double SetMaxSizeM { get; set; } /// <summary> /// 上传错误 /// </summary> public bool GetError { get; private set; } /// <summary> /// 消息 /// </summary> public string GetMessage { get; private set; } /// <summary> /// 文件路径 /// </summary> public string GetFilePath { get; private set; } /// <summary> /// 网站路径 /// </summary> public string GetWebFilePath { get; private set; } /// <summary> /// 获取文件名 /// </summary> public string GetFileName { get; private set; } public UploadFile() { SetFileDirectory = "/upload"; SetFileType = ".pdf,.xls,.xlsx,.doc,.docx,.txt,.png,.jpg,.gif"; SetMaxSizeM = 10; } /// <summary> /// 单文件上传类 /// </summary> /// <param name="directory">文件保存路径</param> /// <param name="fileType">允许上传的文件类型</param> /// <param name="maxSizeM">允许上传多少大小(单位:M)</param> public UploadFile(string directory, string fileType, double maxSizeM) { SetFileDirectory = directory; SetFileType = fileType; SetMaxSizeM = maxSizeM; } /// <summary> /// 保存表单文件,根据file name /// </summary> /// <param name="formField"></param> /// <param name="isRenameSameFile">值为true 同名文件进行重命名,false覆盖原有文件</param> /// <param name="fileName">新的文件名</param> /// <returns></returns> public string Save(string formField, bool isRenameSameFile, string fileName = null) { var Response = HttpContext.Current.Response; var Request = HttpContext.Current.Request; // 获取上传的文件 HttpFileCollection file = Request.Files; HttpPostedFile postFile = file[formField]; return Save(postFile, isRenameSameFile, fileName); } /// <summary> /// 保存表单文件,根据HttpPostedFile /// </summary> /// <param name="postFile">HttpPostedFile</param> /// <param name="isRenameSameFile">值为true 同名文件进行重命名,false覆盖原有文件</param> /// <param name="fileName">新的文件名</param> /// <returns></returns> public string Save(HttpPostedFile postFile, bool isRenameSameFile, string fileName=null) { try { //文件名 fileName = string.IsNullOrEmpty(fileName) ? postFile.FileName : fileName; //验证格式 this.CheckingType(postFile.FileName); //验证大小 this.CheckSize(postFile); if (GetError) return string.Empty; string webDir = string.Empty; // 获取存储目录 var directory = this.GetDirectory(ref webDir); var filePath = directory + fileName; if (System.IO.File.Exists(filePath)) { if (isRenameSameFile) { filePath = directory + DateTime.Now.ToString("yyyyMMddhhssms") + "-" + fileName; } else { System.IO.File.Delete(filePath); } } // 保存文件 postFile.SaveAs(filePath); GetFilePath = filePath; GetWebFilePath = webDir + fileName; GetFileName = postFile.FileName; return filePath; } catch (Exception ex) { TryError(ex.Message); return string.Empty; } } private void CheckSize(HttpPostedFile PostFile) { if (PostFile.ContentLength / 1024.0 / 1024.0 > SetMaxSizeM) { TryError(string.Format("对不起上传文件过大,不能超过{0}M!", SetMaxSizeM)); } } /// <summary> /// 获取目录 /// </summary> /// <returns></returns> private string GetDirectory(ref string webDir) { // 存储目录 string directory = this.SetFileDirectory; // 目录格式 string Date = DateTime.Now.ToString("yyyy-MM/dd"); webDir = directory + "/" + Date + '/'; string dir = HttpContext.Current.Server.MapPath(webDir); // 创建目录 if (Directory.Exists(dir) == false) Directory.CreateDirectory(dir); return dir; } /// <summary> /// 验证文件类型 /// </summary> /// <param name="fileName"></param> private void CheckingType(string fileName) { // 获取允许允许上传类型列表 string[] typeList = this.SetFileType.Split(','); // 获取上传文件类型(小写) string type = Path.GetExtension(fileName).ToLowerInvariant();; // 验证类型 if (typeList.Contains(type) == false) this.TryError("文件类型非法!"); } /// <summary> /// 抛出错误 /// </summary> /// <param name="Msg"></param> private void TryError(string msg) { this.GetError = true; this.GetMessage = msg; } } }
- 1楼Sunday*
- 楼主试试写个上传图片吧,图片大小,尺寸,这个很常用。,上传图片更复杂的gif处理,水印,多尺寸缩略图生成。,还有上传文件或图片的删除功能。
- Re: 孙凯旋
- @Sunday*,= = 明天就写个
- Re: 孙凯旋
- @Sunday*,http://www.cnblogs.com/sunkaixuan/p/4536626.html