Jen

使用zip檔上傳照片至相簿

今天下午,teyou大大要我研究一下如何去壓縮及解壓縮檔案, 我義不容辭的說yes, 也剛好周六晚堂的相簿我想用上傳壓縮檔的方式來上傳照片, 不用一張一張的上傳. 而我今天研究了一下.NET 2.0的 GZipStream,是包在System.IO.Compression裏頭, 而msdn裏的範例還要自已寫個方法去把buffer[]讀進stream, 而且是gz的壓縮檔, 不是很想用= = + ...(微軟怎麼不一次把市面上所有的壓縮寫一寫呢?) 我去網路上找了喵大大(topcat)利用SharpZipLib免費元件寫的一個類別, 基本功能如下:

  • ZipDir(SourceDir,TargetFile):壓縮資料夾
  • ZipFile(SourceFile,TargetFile):壓縮單一檔案
  • UnZipFile(SourceFile,TargetDir):解壓縮到指定資料夾
相關的原始碼如下: 2008版:http://vip2.blueshop.com.tw/topcat/sharefile/MySharpZip2008.zip 2005版:http://vip2.blueshop.com.tw/topcat/sharefile/MySharpZip2005.zip (以上內容參考至topcat大大網站:http://blog.blueshop.com.tw/topcat/archive/2008/02/04/54267.aspx) 但我還是雞婆的研究了一點.NET 2.0內建的GZipStream, 後來是覺得有點浪費時間...= =+ 壓縮程式
protected void Button1_Click(object sender, EventArgs e)
{
 GZipCompress("~/zipDir/1.jpg","~/zipDir/12.gz");
}

public static void GZipCompress(string source, string target)
{
 try
 {
     FileStream infile = new FileStream(HttpContext.Current.Server.MapPath(source),FileMode.Open,FileAccess.Read,FileShare.Read);
     FileStream outfile = new FileStream(HttpContext.Current.Server.MapPath(target), FileMode.Create, FileAccess.Write, FileShare.None);

     byte[] infilebuffer = new byte[infile.Length];

     int count = infile.Read(infilebuffer, 0, infilebuffer.Length);

     GZipStream compressedzipStream = new GZipStream(outfile, CompressionMode.Compress, true);

     compressedzipStream.Write(infilebuffer, 0, infilebuffer.Length);

     compressedzipStream.Close();

     HttpContext.Current.Response.Write("原始檔案大小: " + infilebuffer.Length + ", 壓縮後的檔案大小: " + outfile.Length);
     infile.Close();
     outfile.Close();
        
 }
 catch (Exception)
 {
        
 }
}

0 意見: