文件操作帮助类:
/// <summary> /// 对文件上传操作的帮助类 /// </summary> public class FileManager { /// <summary> /// 上传文件目录名称 /// </summary> private static string FileFolder = ConfigurationSettings.AppSettings["UploadFolder"]; /// <summary> /// 上传文件基础目录 /// </summary> private static string BaseFolder = HttpContext.Current.Server.MapPath("~/"+FileFolder); /// <summary> /// 根网站 /// </summary> private static string RootSite = ConfigurationSettings.AppSettings["RootSite"]; /// <summary> /// 文件基础路径 /// </summary> public static string FileBaseUrl = RootSite + "/" + FileFolder + "/"; /// <summary> /// 上传文件 /// </summary> /// <param name="file"></param> /// <returns>文件上传后的url</returns> public static string UploadFile(HttpPostedFileBase file) { string extension = Path.GetExtension(file.FileName); if(string.IsNullOrEmpty(extension)) { return string.Empty; } string childFolder = extension.Substring(1); string folderName = Path.Combine(BaseFolder, childFolder); CreateFile(folderName); string fileName=Guid.NewGuid() + extension; string fileFullName = Path.Combine(folderName, fileName); CreateFileStream(fileFullName,file); return childFolder + "/" + fileName; } /// <summary> /// /// </summary> /// <param name="fileFullName"></param> /// <param name="file"></param> public static void CreateFileStream(string fileFullName, HttpPostedFileBase file) { using (FileStream fs = new FileStream(fileFullName, FileMode.OpenOrCreate)) { byte[] buffer = new byte[file.ContentLength]; file.InputStream.Read(buffer, 0, file.ContentLength); fs.Write(buffer, 0, file.ContentLength); fs.Flush(); fs.Close(); } } /// <summary> /// 创建对象 /// </summary> /// <param name="folderName"></param> public static void CreateFile(string folderName) { DirectoryInfo di = new DirectoryInfo(folderName); if (!di.Exists) { di.Create(); } } /// <summary> /// 删除文件 /// </summary> /// <param name="fileRelativePath">UploadFile返回的字符串</param> public static void DeleteFile(string fileRelativePath) { if (string.IsNullOrEmpty(fileRelativePath )) { return; } string fileName = Path.Combine(BaseFolder, fileRelativePath); FileInfo fi = new FileInfo(fileName); if (fi.Exists) { fi.Delete(); } } /// <summary> /// 下载文件 /// </summary> /// <param name="fileRelativePath">文件相对路径</param> public static void DownLoadFile(string fileRelativePath) { string fileName = fileRelativePath.Substring(fileRelativePath.LastIndexOf('/')); string filePath = Path.Combine(BaseFolder, fileRelativePath); //将FileInfo类使用改为File类,将using()作用范围去除,因为与fs.close()重复 if (!System.IO.File.Exists(filePath)) { return; } FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate); int streamLength = (int)fs.Length; byte[] buffer = new byte[streamLength]; fs.Read(buffer, 0, streamLength); HttpContext.Current.Response.ContentType = "application/octet-stream"; HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename="+fileName+";"); ////attachment --- 作为附件下载 ////inline --- 在线打开 HttpContext.Current.Response.AddHeader("Content-Length", streamLength.ToString()); HttpContext.Current.Response.BinaryWrite(buffer); fs.Close(); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End(); } }