asp.net在线压缩和解压缩的实现
浏览:34日期:2023-04-09
我们经常会遇到批量上传的问题,也会遇到将某个目录下所有文件都上传到服务器上的问题。那么,如何解决此类问题呢?以前的技术一般采用ActiveX等方式,这里我采用SharpZlib来实现,听说VS2005已有压缩和解压缩的解决方案,我还没有时间用VS2005,所以就只好使用VS2003;+;SharpZlib来解决问题了。//;1.;AttachmentUnZip.cs//;------------------------------------------using;System;using;System.IO;using;ICSharpCode.SharpZipLib.Zip;using;ICSharpCode.SharpZipLib.GZip;using;ICSharpCode.SharpZipLib.BZip2;using;ICSharpCode.SharpZipLib.Checksums;using;ICSharpCode.SharpZipLib.Zip.Compression;using;ICSharpCode.SharpZipLib.Zip.Compression.Streams;namespace;WebZipUnzip{public;class;AttachmentUnZip{public;AttachmentUnZip(){}public;static;void;UpZip(string;zipFile){string;[]FileProperties=new;string[2];FileProperties[0]=zipFile;//待解压的文件FileProperties[1]=zipFile.Substring(0,zipFile.LastIndexOf("/")+1);//解压后放置的目标目录UnZipClass;UnZc=new;UnZipClass();UnZc.UnZip(FileProperties);}}}//;---------------------------------------------//;2.;UnZipClass.cs//;---------------------------------------------using;System;using;System.IO;using;ICSharpCode.SharpZipLib.Zip;using;ICSharpCode.SharpZipLib.GZip;using;ICSharpCode.SharpZipLib.BZip2;using;ICSharpCode.SharpZipLib.Checksums;using;ICSharpCode.SharpZipLib.Zip.Compression;using;ICSharpCode.SharpZipLib.Zip.Compression.Streams;namespace;WebZipUnzip{public;class;UnZipClass{///;<summary>///;解压文件///;</summary>///;<param;name="args">包含要解压的文件名和要解压到的目录名数组</param>public;void;UnZip(string[];args){ZipInputStream;s;=;new;ZipInputStream(File.OpenRead(args[0]));try{ZipEntry;theEntry;while;((theEntry;=;s.GetNextEntry());!=;null){string;directoryName;=;Path.GetDirectoryName(args[1]);string;fileName;;;;;;=;Path.GetFileName(theEntry.Name);//生成解压目录Directory.CreateDirectory(directoryName);if;(fileName;!=;String.Empty){//解压文件到指定的目录FileStream;streamWriter;=;File.Create(args[1]+fileName);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;}}streamWriter.Close();}}s.Close();}catch(Exception;eu){throw;eu;}finally{s.Close();}}//end;UnZippublic;static;bool;UnZipFile(string;file,;string;dir){try{if;(!Directory.Exists(dir))Directory.CreateDirectory(dir);string;fileFullName;=;Path.Combine(dir,file);ZipInputStream;s;=;new;ZipInputStream(File.OpenRead(;fileFullName;));ZipEntry;theEntry;while;((theEntry;=;s.GetNextEntry());!=;null){string;directoryName;=;Path.GetDirectoryName(theEntry.Name);string;fileName;=;Path.GetFileName(theEntry.Name);if;(directoryName;!=;String.Empty)Directory.CreateDirectory(;Path.Combine(dir,;directoryName));if;(fileName;!=;String.Empty){FileStream;streamWriter;=;File.Create(;Path.Combine(dir,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;}}streamWriter.Close();}}s.Close();return;true;}catch;(Exception){throw;}}}//end;UnZipClass}//;----------------------------------------------//;3.;ZipClass.cs//;----------------------------------------------using;System;using;System.IO;using;ICSharpCode.SharpZipLib.Zip;using;ICSharpCode.SharpZipLib.GZip;using;ICSharpCode.SharpZipLib.BZip2;using;ICSharpCode.SharpZipLib.Checksums;using;ICSharpCode.SharpZipLib.Zip.Compression;using;ICSharpCode.SharpZipLib.Zip.Compression.Streams;namespace;WebZipUnzip{///;<summary>///;压缩文件///;</summary>public;class;ZipClass{public;void;ZipFile(string;FileToZip,;string;ZipedFile;,int;CompressionLevel,;int;BlockSize,string;password){//如果文件没有找到,则报错if;(!;System.IO.File.Exists(FileToZip)){throw;new;System.IO.FileNotFoundException("The;specified;file;";+;FileToZip;+;";could;not;be;found.;Zipping;aborderd");}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("ZippedFile");ZipStream.PutNextEntry(ZipEntry);ZipStream.SetLevel(CompressionLevel);byte[];buffer;=;new;byte[BlockSize];System.Int32;size;=StreamToZip.Read(buffer,0,buffer.Length);ZipStream.Write(buffer,0,size);try{while;(size;<;StreamToZip.Length){int;sizeRead;=StreamToZip.Read(buffer,0,buffer.Length);ZipStream.Write(buffer,0,sizeRead);size;+=;sizeRead;}}catch(System.Exception;ex){throw;ex;}ZipStream.Finish();ZipStream.Close();StreamToZip.Close();}public;void;ZipFileMain(string[];args){//string[];filenames;=;Directory.GetFiles(args[0]);string[];filenames;=;new;string[]{args[0]};Crc32;crc;=;new;Crc32();ZipOutputStream;s;=;new;ZipOutputStream(File.Create(args[1]));s.SetLevel(6);;//;0;-;store;only;to;9;-;means;best;compressionforeach;(string;file;in;filenames){//打开压缩文件FileStream;fs;=;File.OpenRead(file);byte[];buffer;=;new;byte[fs.Length];fs.Read(buffer,;0,;buffer.Length);ZipEntry;entry;=;new;ZipEntry(file);entry.DateTime;=;DateTime.Now;//;set;Size;and;the;crc,;because;the;information//;about;the;size;and;crc;should;be;stored;in;the;header//;if;it;is;not;set;it;is;automatically;written;in;the;footer.//;(in;this;case;size;==;crc;==;-1;in;the;header)//;Some;ZIP;programs;have;problems;with;zip;files;that;don't;store//;the;size;and;crc;in;the;header.entry.Size;=;fs.Length;fs.Close();crc.Reset();crc.Update(buffer);entry.Crc;;=;crc.Value;s.PutNextEntry(entry);s.Write(buffer,;0,;buffer.Length);}s.Finish();s.Close();}}}//;---------------------------------------------//;4.;WebForm1.aspx//;---------------------------------------------<%@;Page;language="c#";Codebehind="WebForm1.aspx.cs";AutoEventWireup="false";Inherits="WebZipUnzip.WebForm1";%> <META;content="Microsoft;Visual;Studio;.NET;7.1";name=GENERATOR><META;content=C#;name=CODE_LANGUAGE><META;content=JavaScript;name=vs_defaultClientScript><META;content=http://schemas.microsoft.com/intellisense/ie5;name=vs_targetSchema><FORM;id=Form1;method=post;runat="server"><?xml:namespace;prefix;=;asp;/><asp:Button;id=Button1;style="Z-INDEX:;101;;LEFT:;56px;;POSITION:;absolute;;TOP:;64px";runat="server";Text="压缩"></asp:Button><asp:Button;id=Button2;style="Z-INDEX:;102;;LEFT:;112px;;POSITION:;absolute;;TOP:;64px";runat="server";Text="解压"></asp:Button><INPUT;id=File1;style="Z-INDEX:;103;;LEFT:;32px;;POSITION:;absolute;;TOP:;24px";type=file;name=File1;runat="server">;</FORM></BODY></HTML>//-------------------------------------------//;5.WebForm1.aspx.cs//-------------------------------------------using;System;using;System.Collections;using;System.ComponentModel;using;System.Data;using;System.Drawing;using;System.IO;using;System.Web;using;System.Web.SessionState;using;System.Web.UI;using;System.Web.UI.WebControls;using;System.Web.UI.HtmlControls;namespace;WebZipUnzip{///;<summary>///;Summary;description;for;WebForm1.///;</summary>public;class;WebForm1;:;System.Web.UI.Page{protected;System.Web.UI.WebControls.Button;Button1;protected;System.Web.UI.HtmlControls.HtmlInputFile;File1;protected;System.Web.UI.WebControls.Button;Button2;private;void;Page_Load(object;sender,;System.EventArgs;e){//;Put;user;code;to;initialize;the;page;here}#region;Web;Form;Designer;generated;codeoverride;protected;void;OnInit(EventArgs;e){////;CODEGEN:;This;call;is;required;by;the;ASP.NET;Web;Form;Designer.//InitializeComponent();base.OnInit(e);}///;<summary>///;Required;method;for;Designer;support;-;do;not;modify///;the;contents;of;this;method;with;the;code;editor.///;</summary>private;void;InitializeComponent(){this.Button1.Click;+=;new;System.EventHandler(this.Button1_Click);this.Button2.Click;+=;new;System.EventHandler(this.Button2_Click);this.Load;+=;new;System.EventHandler(this.Page_Load);}#endregion#region;压缩private;void;Button1_Click(object;sender,;System.EventArgs;e){string;[]FileProperties=new;string[2];string;fullName=this.File1.PostedFile.FileName;//C:/test/a.txtstring;destPath=System.IO.Path.GetDirectoryName(fullName);//C:/test//待压缩文件FileProperties[0]=fullName;//压缩后的目标文件FileProperties[1]=;destPath;+"/"+;System.IO.Path.GetFileNameWithoutExtension(fullName);+;".zip";ZipClass;Zc=new;ZipClass();Zc.ZipFileMain(FileProperties);//删除压缩前的文件System.IO.File.Delete(fullName);}#endregion#region;解压private;void;Button2_Click(object;sender,;System.EventArgs;e){string;fullName=this.File1.PostedFile.FileName;//C:/test/a.zip//解压文件//AttachmentUnZip.UpZip(fullName);//;;;string[];FileProperties;=;new;string[2];//;;;FileProperties[0];=;fullName;//待解压的文件//;;;FileProperties[1];=;System.IO.Path.GetDirectoryName(fullName);//解压后放置的目标目录//;;;UnZipClass;UnZc=new;UnZipClass();//;;;UnZc.UnZip(FileProperties);string;dir;=;System.IO.Path.GetDirectoryName(fullName);string;fileName;=;System.IO.Path.GetFileName(fullName);UnZipClass.UnZipFile(fileName,;dir);}#endregion}}
相关文章: