asp.net web开发——文件夹的上传和下载
2021-05-11 15:27
                         标签:null   otto   dict   ledir   rto   byte   NPU   one   cme    ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。 ASP.NET页面设计:TextBox和Button按钮。 TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button实现选择文件夹的问题还没有解决,暂时只能手动输入。 两种方法:生成rar和zip。 1.生成rar using Microsoft.Win32; using System.Diagnostics; protected void Button1Click(object sender, EventArgs e)     {         RAR(@"E:\95413594531\GIS", "tmptest", @"E:\95413594531\");     }     ///    /// 压缩文件    ///    /// 需要压缩的文件夹或者单个文件    /// 生成压缩文件的文件名    /// 生成压缩文件保存路径    ///     protected bool RAR(string DFilePath, string DRARName,string DRARPath)     {         String therar;         RegistryKey theReg;         Object theObj;         String theInfo;         ProcessStartInfo theStartInfo;         Process theProcess;         try         {             theReg = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\Shell\Open\Command"); //注:未在注册表的根路径找到此路径             theObj = theReg.GetValue("");             therar = theObj.ToString();             theReg.Close();             therar = therar.Substring(1, therar.Length - 7);             theInfo = " a    " + " " + DRARName + "  " + DFilePath +" -ep1"; //命令 + 压缩后文件名 + 被压缩的文件或者路径             theStartInfo = new ProcessStartInfo();             theStartInfo.FileName = therar;             theStartInfo.Arguments = theInfo;             theStartInfo.WindowStyle = ProcessWindowStyle.Hidden;             theStartInfo.WorkingDirectory = DRARPath ; //RaR文件的存放目录。             theProcess = new Process();             theProcess.StartInfo = theStartInfo;             theProcess.Start();             theProcess.WaitForExit();             theProcess.Close();             return true;         }         catch (Exception ex)         {             return false;         }     }       ///     /// 解压缩到指定文件夹     ///     /// 压缩文件存在的目录     /// 压缩文件名称     /// 解压到文件夹     ///     protected bool UnRAR(string RARFilePath,string RARFileName,string UnRARFilePath)     {         //解压缩         String therar;         RegistryKey theReg;         Object theObj;         String theInfo;         ProcessStartInfo theStartInfo;         Process theProcess;         try          {             theReg = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRar.exe\Shell\Open\Command");             theObj = theReg.GetValue("");             therar = theObj.ToString();             theReg.Close();             therar = therar.Substring(1, therar.Length - 7);             theInfo = @" X " + " " + RARFilePath + RARFileName + " " + UnRARFilePath;             theStartInfo = new ProcessStartInfo();             theStartInfo.FileName = therar;             theStartInfo.Arguments = theInfo;             theStartInfo.WindowStyle = ProcessWindowStyle.Hidden;             theProcess = new Process();             theProcess.StartInfo = theStartInfo;             theProcess.Start();             return true;         }         catch (Exception ex)          {              return false;          }     } 注:这种方法在在电脑注册表中未找到应有的路径,未实现,仅供参考。 2.生成zip 通过调用类库ICSharpCode.SharpZipLib.dll 该类库可以从网上下载。也可以从本链接下载:SharpZipLib_0860_Bin.zip 增加两个类:Zip.cs和UnZip.cs (1)Zip.cs using System; using System.Collections.Generic; using System.Linq; using System.Web;   using System.IO; using System.Collections; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip;     namespace UpLoad {     ///      /// 功能:压缩文件     /// creator chaodongwang 2009-11-11     ///      public class Zip     {         ///          /// 压缩单个文件         ///          /// 被压缩的文件名称(包含文件路径)         /// 压缩后的文件名称(包含文件路径)         /// 压缩率0(无压缩)-9(压缩率最高)         /// 缓存大小         public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel)         {             //如果文件没有找到,则报错             if (!System.IO.File.Exists(FileToZip))             {                 throw new System.IO.FileNotFoundException("文件:" + FileToZip + "没有找到!");             }               if (ZipedFile == string.Empty)             {                 ZipedFile = Path.GetFileNameWithoutExtension(FileToZip) + ".zip";             }               if (Path.GetExtension(ZipedFile) != ".zip")             {                 ZipedFile = ZipedFile + ".zip";             }               ////如果指定位置目录不存在,创建该目录             //string zipedDir = ZipedFile.Substring(0,ZipedFile.LastIndexOf("\\"));             //if (!Directory.Exists(zipedDir))             //    Directory.CreateDirectory(zipedDir);               //被压缩文件名称             string filename = FileToZip.Substring(FileToZip.LastIndexOf(‘\\‘) + 1);                         System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);             System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);             ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);             ZipEntry ZipEntry = new ZipEntry(filename);             ZipStream.PutNextEntry(ZipEntry);             ZipStream.SetLevel(CompressionLevel);             byte[] buffer = new byte[2048];             System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);             ZipStream.Write(buffer, 0, size);             try             {                 while (size                  {                     int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);                     ZipStream.Write(buffer, 0, sizeRead);                     size += sizeRead;                 }             }             catch (System.Exception ex)             {                 throw ex;             }             finally             {                 ZipStream.Finish();                 ZipStream.Close();                 StreamToZip.Close();             }         }           ///          /// 压缩文件夹的方法         ///          public void ZipDir(string DirToZip, string ZipedFile, int CompressionLevel)         {             //压缩文件为空时默认与压缩文件夹同一级目录             if (ZipedFile == string.Empty)             {                 ZipedFile = DirToZip.Substring(DirToZip.LastIndexOf("\\") + 1);                 ZipedFile = DirToZip.Substring(0, DirToZip.LastIndexOf("\\")) +"\\"+ ZipedFile+".zip";             }               if (Path.GetExtension(ZipedFile) != ".zip")             {                 ZipedFile = ZipedFile + ".zip";             }               using (ZipOutputStream zipoutputstream = new ZipOutputStream(File.Create(ZipedFile)))             {                 zipoutputstream.SetLevel(CompressionLevel);                 Crc32 crc = new Crc32();                 Hashtable fileList = getAllFies(DirToZip);                 foreach (DictionaryEntry item in fileList)                 {                     FileStream fs = File.OpenRead(item.Key.ToString());                     byte[] buffer = new byte[fs.Length];                     fs.Read(buffer, 0, buffer.Length);                     ZipEntry entry = new ZipEntry(item.Key.ToString().Substring(DirToZip.Length + 1));                     entry.DateTime = (DateTime)item.Value;                     entry.Size = fs.Length;                     fs.Close();                     crc.Reset();                     crc.Update(buffer);                     entry.Crc = crc.Value;                     zipoutputstream.PutNextEntry(entry);                     zipoutputstream.Write(buffer, 0, buffer.Length);                 }             }         }           ///          /// 获取所有文件         ///          ///          private Hashtable getAllFies(string dir)         {             Hashtable FilesList = new Hashtable();             DirectoryInfo fileDire = new DirectoryInfo(dir);             if (!fileDire.Exists)             {                 throw new System.IO.FileNotFoundException("目录:" + fileDire.FullName + "没有找到!");             }               this.getAllDirFiles(fileDire, FilesList);             this.getAllDirsFiles(fileDire.GetDirectories(), FilesList);             return FilesList;         }         ///          /// 获取一个文件夹下的所有文件夹里的文件         ///          ///          ///          private void getAllDirsFiles(DirectoryInfo[] dirs, Hashtable filesList)         {             foreach (DirectoryInfo dir in dirs)             {                 foreach (FileInfo file in dir.GetFiles("*.*"))                 {                     filesList.Add(file.FullName, file.LastWriteTime);                 }                 this.getAllDirsFiles(dir.GetDirectories(), filesList);             }         }         ///          /// 获取一个文件夹下的文件         ///          /// 目录名称         /// 文件列表HastTable         private void getAllDirFiles(DirectoryInfo dir, Hashtable filesList)         {             foreach (FileInfo file in dir.GetFiles("*.*"))             {                 filesList.Add(file.FullName, file.LastWriteTime);             }         }     } } (2)UnZip.cs using System.Collections.Generic; using System.Linq; using System.Web;   ///  /// 解压文件 ///    using System; using System.Text; using System.Collections; using System.IO; using System.Diagnostics; using System.Runtime.Serialization.Formatters.Binary; using System.Data;   using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Zip.Compression; using ICSharpCode.SharpZipLib.Zip.Compression.Streams;   namespace UpLoad {     ///      /// 功能:解压文件     /// creator chaodongwang 2009-11-11     ///      public class UnZipClass     {         ///          /// 功能:解压zip格式的文件。         ///          /// 压缩文件路径         /// 解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹         /// 出错信息         ///          public void UnZip(string zipFilePath, string unZipDir)         {             if (zipFilePath == string.Empty)             {                 throw new Exception("压缩文件不能为空!");             }             if (!File.Exists(zipFilePath))             {                 throw new System.IO.FileNotFoundException("压缩文件不存在!");             }             //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹             if (unZipDir == string.Empty)                 unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));             if (!unZipDir.EndsWith("\\"))                 unZipDir += "\\";             if (!Directory.Exists(unZipDir))                 Directory.CreateDirectory(unZipDir);               using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))             {                   ZipEntry theEntry;                 while ((theEntry = s.GetNextEntry()) != null)                 {                     string directoryName = Path.GetDirectoryName(theEntry.Name);                     string fileName = Path.GetFileName(theEntry.Name);                     if (directoryName.Length > 0)                     {                         Directory.CreateDirectory(unZipDir + directoryName);                     }                     if (!directoryName.EndsWith("\\"))                         directoryName += "\\";                     if (fileName != String.Empty)                     {                         using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))                         {                               int size = 2048;                             byte[] data = new byte[2048];                             while (true)                             {                                 size = s.Read(data, 0, data.Length);                                 if (size > 0)                                 {                                     streamWriter.Write(data, 0, size);                                 }                                 else                                 {                                     break;                                 }                             }                         }                     }                 }             }         }     } } 以上这两个类库可以直接在程序里新建类库,然后复制粘贴,直接调用即可。 主程序代码如下所示: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Drawing;   using Microsoft.Win32; using System.Diagnostics;     namespace UpLoad {     public partial class UpLoadForm : System.Web.UI.Page     {         protected void Page_Load(object sender, EventArgs e)         {           }           protected void Button1_Click(object sender, EventArgs e)         {             if (TextBox1.Text == "") //如果输入为空,则弹出提示             {                 this.Response.Write("输入为空,请重新输入!‘);window.opener.location.href=window.opener.location.href;");             }             else             {                 //压缩文件夹                 string zipPath = TextBox1.Text.Trim(); //获取将要压缩的路径(包括文件夹)                 string zipedPath = @"c:\temp"; //压缩文件夹的路径(包括文件夹)                 Zip Zc = new Zip();                 Zc.ZipDir(zipPath, zipedPath, 6);                 this.Response.Write("压缩成功!‘);window.opener.location.href=window.opener.location.href;");                   //解压文件夹                 UnZipClass unZip = new UnZipClass();                 unZip.UnZip(zipedPath+ ".zip", @"c:\temp"); //要解压文件夹的路径(包括文件名)和解压路径(temp文件夹下的文件就是输入路径文件夹下的文件)                 this.Response.Write("解压成功!‘);window.opener.location.href=window.opener.location.href;");               }         }     } } 本方法经过测试,均已实现。 另外,附上另外一种上传文件方法,经测试已实现,参考链接:http://blog.ncmem.com/wordpress/2019/11/20/net%e4%b8%8a%e4%bc%a0%e5%a4%a7%e6%96%87%e4%bb%b6%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/ asp.net web开发——文件夹的上传和下载 标签:null   otto   dict   ledir   rto   byte   NPU   one   cme    原文地址:https://www.cnblogs.com/songsu/p/12052849.html
上一篇:CURL命令学习一
下一篇:PHP 简易网页访问统计