ASP.NET實(shí)現(xiàn)的簡(jiǎn)單易用文件上傳類
調(diào)用方法:
UploadFile uf = new UploadFile(); /*可選參數(shù)*/ uf.SetIsUseOldFileName(true);//是否使用原始文件名作為新文件的文件名(默認(rèn):true),true原始文件名,false系統(tǒng)生成新文件名 uf.SetFileDirectory(Server.MapPath("/file/temp3/"));//文件保存路徑(默認(rèn):/upload) uf.SetFileType("*");//允許上傳的文件類型, 逗號(hào)分割,必須全部小寫(xiě)! *表示所有 (默認(rèn)值: .pdf,.xls,.xlsx,.doc,.docx,.txt,.png,.jpg,.gif ) uf.SetIsRenameSameFile(false);//重命名同名文件? //文件以時(shí)間分目錄保存 var message = uf.Save(Request.Files["Fileupload1"]); // “/file/temp3/2015/4/xx.jpg” //文件以編號(hào)分目錄保存 var message2 = uf.Save(Request.Files["Fileupload1"], "001" /*編號(hào)*/); // “/file/temp3/001/xx.jpg” //返回信息 var isError = message.Error;//判段是否上傳成功 var webPath = message.WebFilePath;//返回web路徑 var msg = message.Message;//返回上傳信息 var filePath = message.FilePath;//反回文件路徑 var isSuccess = message.Error == false;
代碼:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text.RegularExpressions; using System.Web; using System.Web.Hosting; namespace SyntacticSugar { /// <summary> /// ** 描述:?jiǎn)挝募蟼黝?(暫時(shí)不支持多文件上傳) /// ** 創(chuàng)始時(shí)間:2015-5-27 /// ** 修改時(shí)間:- /// ** 作者:sunkaixuan /// </summary> public class UploadFile { private ParamsModel Params; public UploadFile() { Params = new ParamsModel() { FileDirectory = "/upload", FileType = ".pdf,.xls,.xlsx,.doc,.docx,.txt,.png,.jpg,.gif", MaxSizeM = 10, PathSaveType = PathSaveType.dateTimeNow, IsRenameSameFile=true }; } /// <summary> /// 文件保存路徑(默認(rèn):/upload) /// </summary> public void SetFileDirectory(string fileDirectory) { if (fileDirectory == null) { throw new ArgumentNullException("fileDirectory"); } var isMapPath = Regex.IsMatch(fileDirectory, @"[a-z]\:\\", RegexOptions.IgnoreCase); if (isMapPath) { fileDirectory = GetRelativePath(fileDirectory); } Params.FileDirectory = fileDirectory; } /// <summary> /// 是否使用原始文件名作為新文件的文件名(默認(rèn):true) /// </summary> /// <param name="isUseOldFileName">true原始文件名,false系統(tǒng)生成新文件名</param> public void SetIsUseOldFileName(bool isUseOldFileName) { Params.IsUseOldFileName = isUseOldFileName; } /// <summary> /// 允許上傳的文件類型, 逗號(hào)分割,必須全部小寫(xiě)! *表示所有 (默認(rèn)值: .pdf,.xls,.xlsx,.doc,.docx,.txt,.png,.jpg,.gif ) /// </summary> public void SetFileType(string fileType) { Params.FileType = fileType; } /// <summary> /// 允許上傳多少大小(單位:M) /// </summary> public void SetMaxSizeM(double maxSizeM) { Params.MaxSizeM = maxSizeM; } /// <summary> /// 重命名同名文件? /// </summary> /// <param name="isRenameSameFile">true:重命名,false覆蓋</param> public void SetIsRenameSameFile(bool isRenameSameFile) { Params.IsRenameSameFile = isRenameSameFile; } /// <summary> /// 保存表單文件 /// </summary> /// <param name="postFile">HttpPostedFile</param> /// <returns></returns> public ResponseMessage Save(HttpPostedFile postFile) { return CommonSave(postFile); } /// <summary> /// 保存表單文件,根據(jù)編號(hào)創(chuàng)建子文件夾 /// </summary> /// <param name="postFile">HttpPostedFile</param> /// <param name="number">編號(hào)</param> /// <returns></returns> public ResponseMessage Save(HttpPostedFile postFile, string number) { Params.PathSaveType = PathSaveType.code; _Number = number; return CommonSave(postFile); } /// <summary> /// 保存表單文件,根據(jù)HttpPostedFile /// </summary> /// <param name="postFile">HttpPostedFile</param> /// <param name="isRenameSameFile">值為true 同名文件進(jìn)行重命名,false覆蓋原有文件</param> /// <param name="fileName">新的文件名</param> /// <returns></returns> private ResponseMessage CommonSave(HttpPostedFile postFile) { ResponseMessage reval = new ResponseMessage(); try { if (postFile == null || postFile.ContentLength == 0) { TryError(reval, "沒(méi)有文件!"); return reval; } //文件名 string fileName = Params.IsUseOldFileName ? postFile.FileName : DateTime.Now.ToString("yyyyMMddhhmmssms") + Path.GetExtension(postFile.FileName); //驗(yàn)證格式 this.CheckingType(reval, postFile.FileName); //驗(yàn)證大小 this.CheckSize(reval, postFile); if (reval.Error) return reval; string webDir = string.Empty; // 獲取存儲(chǔ)目錄 var directory = this.GetDirectory(ref webDir); var filePath = directory + fileName; if (System.IO.File.Exists(filePath)) { if (Params.IsRenameSameFile) { filePath = directory + DateTime.Now.ToString("yyyyMMddhhssms") + "-" + fileName; } else { System.IO.File.Delete(filePath); } } // 保存文件 postFile.SaveAs(filePath); reval.FilePath = filePath; reval.FilePath = webDir + fileName; reval.FileName = fileName; reval.WebFilePath = webDir + fileName; return reval; } catch (Exception ex) { TryError(reval, ex.Message); return reval; } } private void CheckSize(ResponseMessage message, HttpPostedFile PostFile) { if (PostFile.ContentLength / 1024.0 / 1024.0 > Params.MaxSizeM) { TryError(message, string.Format("對(duì)不起上傳文件過(guò)大,不能超過(guò){0}M!", Params.MaxSizeM)); } } /// <summary> /// 根據(jù)物理路徑獲取相對(duì)路徑 /// </summary> /// <param name="fileDirectory"></param> /// <param name="sever"></param> /// <returns></returns> private static string GetRelativePath(string fileDirectory) { var sever = HttpContext.Current.Server; fileDirectory = "/" + fileDirectory.Replace(sever.MapPath("~/"), "").TrimStart('/').Replace('\\', '/'); return fileDirectory; } /// <summary> /// 獲取目錄 /// </summary> /// <returns></returns> private string GetDirectory(ref string webDir) { var sever = HttpContext.Current.Server; // 存儲(chǔ)目錄 string directory = Params.FileDirectory; // 目錄格式 string childDirectory = DateTime.Now.ToString("yyyy-MM/dd"); if (Params.PathSaveType == PathSaveType.code) { childDirectory = _Number; } webDir = directory.TrimEnd('/') + "/" + childDirectory + '/'; string dir = sever.MapPath(webDir); // 創(chuàng)建目錄 if (Directory.Exists(dir) == false) Directory.CreateDirectory(dir); return dir; } /// <summary> /// 驗(yàn)證文件類型) /// </summary> /// <param name="fileName"></param> private void CheckingType(ResponseMessage message, string fileName) { if (Params.FileType != "*") { // 獲取允許允許上傳類型列表 string[] typeList = Params.FileType.Split(','); // 獲取上傳文件類型(小寫(xiě)) string type = Path.GetExtension(fileName).ToLowerInvariant(); ; // 驗(yàn)證類型 if (typeList.Contains(type) == false) this.TryError(message, "文件類型非法!"); } } /// <summary> /// 拋出錯(cuò)誤 /// </summary> /// <param name="Msg"></param> private void TryError(ResponseMessage message, string msg) { message.Error = true; message.Message = msg; } #region models private class ParamsModel { /// <summary> /// 文件保存路徑 /// </summary> public string FileDirectory { get; set; } /// <summary> /// 允許上傳的文件類型, 逗號(hào)分割,必須全部小寫(xiě)! /// </summary> public string FileType { get; set; } /// <summary> /// 允許上傳多少大小 /// </summary> public double MaxSizeM { get; set; } /// <summary> /// 路徑存儲(chǔ)類型 /// </summary> public PathSaveType PathSaveType { get; set; } /// <summary> /// 重命名同名文件? /// </summary> public bool IsRenameSameFile { get; set; } /// <summary> /// 是否使用原始文件名 /// </summary> public bool IsUseOldFileName { get; set; } } /// <summary> /// 路徑存儲(chǔ)類型 /// </summary> public enum PathSaveType { /// <summary> /// 根據(jù)時(shí)間創(chuàng)建存儲(chǔ)目錄 /// </summary> dateTimeNow = 0, /// <summary> /// 根據(jù)ID編號(hào)方式來(lái)創(chuàng)建存儲(chǔ)目錄 /// </summary> code = 1 } private string _Number { get; set; } /// <summary> /// 反回信息 /// </summary> public class ResponseMessage { /// <summary> /// 上傳錯(cuò)誤 /// </summary> public bool Error { get; set; } /// <summary> /// 消息 /// </summary> public string Message { get; set; } /// <summary> /// 文件路徑 /// </summary> public string FilePath { get; set; } /// <summary> /// 網(wǎng)站路徑 /// </summary> public string WebFilePath { get; set; } /// <summary> /// 獲取文件名 /// </summary> public string FileName { get; set; } } #endregion } }
- asp 中常用的文件處理函數(shù)
- ASP.NET MVC處理文件上傳的小例子
- asp.net 文件上傳實(shí)例匯總
- asp.net文件上傳示例分享
- ASP.NET讓FileUpload控件支持瀏覽自動(dòng)上傳功能的解決方法
- asp.net fileupload控件上傳文件與多文件上傳
- asp.net FileUpload控件實(shí)現(xiàn)文件格式判斷與文件大小限制
- ASP.NET對(duì)大文件上傳的解決方案
- asp.net批量多選文件上傳解決方案
- ASP.NET設(shè)計(jì)FTP文件上傳的解決方案
- asp.net文件上傳帶進(jìn)度條實(shí)現(xiàn)案例(多種風(fēng)格)
- asp.net文件上傳解決方案(圖片上傳、單文件上傳、多文件上傳、檢查文件類型)
- ASP.NET?MVC5實(shí)現(xiàn)文件上傳與地址變化處理(5)
- ASP.NET文件處理如何操作
相關(guān)文章
Asp.Net2.0權(quán)限樹(shù)中Checkbox的操作
Asp.Net2.0權(quán)限樹(shù)中Checkbox的操作...2006-09-09ASP.NET MVC限制同一個(gè)IP地址單位時(shí)間間隔內(nèi)的請(qǐng)求次數(shù)
這篇文章介紹了ASP.NET MVC限制同一個(gè)IP地址單位時(shí)間間隔內(nèi)請(qǐng)求次數(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10ASP.NET中CKEditor與CKFinder的配置使用
這篇文章主要介紹了ASP.NET中CKEditor與CKFinder的配置使用的相關(guān)資料,需要的朋友可以參考下2015-06-06asp.net中的“按需打印”(打印你需要打印的部分) 實(shí)現(xiàn)代碼
有時(shí)我們需要對(duì)asp.net網(wǎng)頁(yè)中某些特定部分進(jìn)行打印,很多人采用CSS樣式或特定的打印控件來(lái)解決網(wǎng)頁(yè)定制打印功能。這里采用Javascript樣式替換方式進(jìn)行打印,使網(wǎng)頁(yè)顯示與打印效果相分離。2013-06-06Entity?Framework使用DBContext實(shí)現(xiàn)增刪改查
這篇文章介紹了Entity?Framework使用DBContext實(shí)現(xiàn)增刪改查的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10頁(yè)面間隔半秒鐘更新時(shí)間 Asp.net使用Comet開(kāi)發(fā)http長(zhǎng)連接示例分享
Comet(Reverse AJAX)主要是通過(guò)HTTP長(zhǎng)連接, 保持和服務(wù)器的連接,實(shí)現(xiàn)Server PUSH 和雙向通信,下面通過(guò)示例學(xué)習(xí)他的使用方法2014-01-01asp.net下UTF-7轉(zhuǎn)GB2312編碼的代碼(中文)
UTF-7轉(zhuǎn)換GB2312編碼的方法2010-07-07