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

简介:

 

复制代码
代码
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月前
|
存储 UED Windows
Windows服务器上大量文件迁移方案
Windows服务器上大量文件迁移方案
140 1
|
1月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
31 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
1月前
阿里云国际版购买了服务器后如何下载发票?
阿里云国际版购买了服务器后如何下载发票?
|
1月前
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
103 4
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
54 4
|
29天前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
129 0
|
1月前
|
前端开发 Java Shell
后端项目打包上传服务器部署运行记录
后端项目打包上传服务器部署运行记录
31 0
|
3月前
|
Linux
Linux 服务器下载百度网盘文件
本教程指导如何使用 `bypy` 库从百度网盘下载文件。首先通过 `pip install bypy` 安装库,接着运行 `bypy info` 获取登录链接并完成授权,最后将文件置于指定目录并通过 `bypy downdir /Ziya-13b-v1` 命令下载至本地。
338 1
Linux 服务器下载百度网盘文件
|
1月前
|
Java Linux Maven
服务器部署之项目打包及命令行输出
服务器部署之项目打包及命令行输出
24 0
|
3月前
|
数据可视化 Python
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
68 0

热门文章

最新文章