All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
AJAX之xmlHttp_[AJAX教程]
XML入门教程:XML是如何被利用的?_[XML教程]
利用SQL,Server发邮件_[SQL,Server教程]
提高效率,精选ASP.NET实用代码片段_[Asp.Net教程]
防止用户上传产生无效文件源码_[Asp.Net教程]
XSL JavaScript+XMLDOM的使用_[XML教程]
入门知识:动态网页PHP编程中字符串5个技巧_[PHP教程]
SQL2000中默认sa帐号改名和删除的最安全方法_[SQL Server教程]
随机显示数据库记录_[Asp.Net教程]
用PHP实现自动把纯文本转换成Web页面_php资料_编程技术
Reading number is top 10 pictures
狗狗与主人神同步2
The goddess of the single reason2
Summer is most suitable for young people to travel in China9
大年初五接财神
Most cow mistress ZhaoGongXia face exposure
NeedWallpaper7
西方气质的东方美女2
超强高考作文
A man's favorite things2
壮丽的云彩1
Download software ranking
打鸟视频
Boxer's Top ten classic battle4
Tram sex maniac 2 (H) rar bag13
Macromedia Dreamweaver 8
Tram sex maniac 2 (H) rar bag9
Unix video tutorial17
Love the forty days
White deer villiage
C++教程第四版
matrix2
delv published in(发表于) 2014/1/6 9:03:27 Edit(编辑)
ASP.NET实现文件的在线压缩和解压缩_[Asp.Net教程]

ASP.NET实现文件的在线压缩和解压缩_[Asp.Net教程]

ASP.NET实现文件的在线压缩和解压缩_[Asp.Net教程]

 我们经常会遇到批量上传的问题,也会遇到将某个目录下所有文件都上传到服务器上的问题。那么,如何解决此类问题呢?以前的技术一般采用ActiveX等方式,这里笔者采用SharpZlib来实现,听说VS2005已有压缩和解压缩的解决方案,笔者还没有时间用VS2005,所以就只好使用VS2003 + SharpZlib来解决问题了。

  1、首先从这里下载0.84版本的SharpZlib源码及示例码。

  2、下载下来之后你发现它没有VS2003的解决方案文件,没有关系。你可以自己建立,首先新建一个ZipUnzip的解决方案,然后,将上面经过解压缩之后的所有文件及目录COPY到你的解决方案所在的目录下。

  3、在VS2003解决方案资源管理器(一般是在右上方中部点的位置)中点击显示所有文件按钮,然后可以见到很多“虚”的图标、文件及文件夹等,可以一次选择它们,然后包含进项目中。

  4、编译,最好使用Release选项,编译完成之后你可以在\bin\Release\看到ZipUnzip.dll的类了。如果你编译时报错,说什么AssemblyKeyFile之类的,你可以使用强命名工具新建一个,也可以将AssemblyInfo.cs中[assembly: AssemblyKeyFile("。。。。。")]改成:[assembly: AssemblyKeyFile("")] (不推荐这样做)。

  5、新建一个WEBFORM项目,添加ZipUnzip.dll类的引用,然后添加如下文件及内容:


// ------------------------------------------
// 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
 {
  ///
  /// 解压文件
  ///
  /// 包含要解压的文件名和要解压到的目录名数组
  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
{
 ///
 /// 压缩文件
 ///
 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.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 description for WebForm1.
 ///
 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);
  }

  ///
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  ///
  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
 }
}

  此方案解决了文件名中文字的问题,目录解压缩问题。

  至于整个文件夹批量上传并压缩成一个WINZIP压缩包的问题,没有时间解决了,各位如有解决方案,不妨共享一下。
来源:CSDN





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.