服务器多个文件打包压缩下载

简介:

 

复制代码
ExpandedBlockStart.gif 代码
using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  zhan.File;
using  ICSharpCode.SharpZipLib.Zip;
using  System.IO;
using  ICSharpCode.SharpZipLib.Checksums;

public   partial   class  downfile : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        
if  (Request.QueryString[ " path " !=   null   &&  Request.QueryString[ " path " ].ToString()  !=   "" )
        {
            package(Request.QueryString[
" path " ].ToString());
        }
        
    }
    
private   void  package( string  filename)
    {
        
string  file  =  filename.Substring( 0 , filename.LastIndexOf( ' . ' ));
        
string  suffix  =  filename.Substring(filename.LastIndexOf( ' . ' ), filename.Length  -  filename.LastIndexOf( ' . ' ));
        
        
string [] files  = { filename, file  +   " _2 "   +  suffix, file  +   " _3 "   +  suffix };
        
        
string  zipname  =  DateTime.Now.ToString( " yyyyMMddHHmmss " +   " .zip " ;
        
string  zippath  =   " ~/upload/temp/ "   +  zipname;
        ZipFileDictory(files, zippath);

        FileStream fs 
=  File.OpenRead(Server.MapPath(zippath));
        
byte [] buffer  =   new   byte [ 102400 ];
        
long  dataLengthToRead  =  fs.Length; // 获取下载的文件总大小 

        fs.Position 
=   0 ;
        Response.ContentType 
=   " application/octet-stream " ;
        Response.AddHeader(
" Content-Length " , fs.Length.ToString());
        Response.AddHeader(
" content-disposition " " attachment;filename= "   + HttpUtility.UrlEncode(zipname));
        
while  (dataLengthToRead  >   0   &&  Response.IsClientConnected)
        {
            
int  lengthRead  =  fs.Read(buffer,  0 , buffer.Length); // 读取的大小 
            Response.OutputStream.Write(buffer,  0 , lengthRead);
            Response.Flush();
            dataLengthToRead 
=  dataLengthToRead  -  lengthRead;
        }
        fs.Close();
        fs.Dispose();
        File.Delete(Server.MapPath(zippath));
        Response.End();
    }
    
public   void  ZipFileDictory( string [] filenames,  string  filename)
    {
        Crc32 crc 
=   new  Crc32();
        ZipOutputStream s 
=   new  ZipOutputStream(System.IO.File.Create(System.Web.HttpContext.Current.Server.MapPath(filename)));
        s.SetLevel(
6 );

        
foreach  ( string  file  in  filenames)
        {
            
if  (File.Exists(System.Web.HttpContext.Current.Server.MapPath(file)))
            {
                FileStream fs 
=  System.IO.File.OpenRead(System.Web.HttpContext.Current.Server.MapPath(file));

                
byte [] buffer  =   new   byte [fs.Length];
                fs.Read(buffer, 
0 , buffer.Length);
                ZipEntry entry 
=   new  ZipEntry(file.Substring(file.LastIndexOf( ' / ' +   1 , file.Length  -  file.LastIndexOf( ' / ' -   1 ));

                entry.DateTime 
=  DateTime.Now;

                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();
    }
}
复制代码



本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/archive/2011/02/16/1955899.html,如需转载请自行联系原作者
相关文章
|
2月前
|
消息中间件 安全 Linux
服务器(Linux)在线下载activeMQ以及配置打开
服务器(Linux)在线下载activeMQ以及配置打开
36 3
|
2月前
|
网络协议
​LabVIEW从另一个VI或通过VI服务器访问正在运行的可执行文件
​LabVIEW从另一个VI或通过VI服务器访问正在运行的可执行文件
22 0
|
2月前
|
存储 SQL 数据挖掘
服务器数据恢复—误删除VMware虚拟机vmdk文件的数据恢复案例
服务器数据恢复环境: 某大厂PS4000服务器,服务器上部署VMware ESXi虚拟化平台。 服务器故障: 机房断电,重启后服务器中的某台虚拟机不能正常启动。管理员查看虚拟机配置文件,发现无法启动的虚拟机的配置文件除了磁盘文件以外其他配置文件全部丢失,xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件还存在。联系VMware原厂工程师进行诊断,VMware原厂工程师尝试新建一个虚拟机,但发现存储空间不足,于是将故障虚拟机下的xxx-flat.vmdk磁盘文件删除了。VMware工程师重新建了一个虚拟机,分配了固定大小的虚拟磁盘,为虚拟机安装了Window
服务器数据恢复—误删除VMware虚拟机vmdk文件的数据恢复案例
|
4天前
|
JavaScript Java 应用服务中间件
打包前后端程序并在阿里云服务器上部署,只需几步就能实现!
打包前后端程序并在阿里云服务器上部署,只需几步就能实现!
|
5天前
|
数据安全/隐私保护
|
14天前
|
弹性计算 安全 Linux
云服务器 ECS产品使用问题之自制镜像如何下载
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
2月前
|
数据安全/隐私保护
解决使用SourceTree下载GitLab服务器上的代码每次都需要输入密码问题
解决使用SourceTree下载GitLab服务器上的代码每次都需要输入密码问题
29 2
|
2月前
|
流计算
实时计算 Flink版操作报错之程序在idea跑没问题,打包在服务器跑就一直报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
Linux 网络安全
linux/服务器使用scp将一个服务器文件转移到另一个服务器上
linux/服务器使用scp将一个服务器文件转移到另一个服务器上
139 3
|
2月前
|
数据安全/隐私保护
通过mac电脑的下载服务器的日志与日志筛选
通过mac电脑的下载服务器的日志与日志筛选
31 0