asp.net在线压缩和解压缩的实现

2019-06-20 08:48:37来源: 阅读 ()

新老客户大回馈,云服务器低至5折

我们经常会遇到批量上传的问题,也会遇到将某个目录下所有文件都上传到服务器上的问题。那么,如何解决此类问题呢?以前的技术一般采用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;UnZip

public;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;compression

foreach;(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";%>&nbsp;
<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;code
override;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.txt
string;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
}
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Asp.net中防止用户多次登录的方法

下一篇:ASP.NET应用中缓存Oracle数据