最近接到一个需求,就是选择多个文件下载时,不要一个一个下载,直接把多个文件打包成一个文件进行下载。我们项目是前后端分离,所以我写了个接口,让前端传参数,后台下载。

废话不多说,直接上代码:

先是压缩单个文件的:

  1. $zip = new ZipArchive;
  2. $zip_time = time().".zip"; // 压缩的目录名
  3. $zip_filename = $zip_time; // 指定一个压缩包地址
  4.  
  5. $zip->open($zip_filename, ZIPARCHIVE::CREATE); // 打开压缩包,没有则创建
  6.  
  7. // 参数1是要压缩的文件,参数2为压缩后,在压缩包中的文件名
  8. //如果需要的压缩后的文件跟原文件名一样 addFile() 的第二个参数可以改为 basename("../alg/demo1.php"),也就是原文件所在的路径
  9. $zip->addFile("log.txt",basename("log.txt"));
  10. $rs = $zip->close();
  11. var_dump($rs);

  

多个文件下载打包成一个文件的:

  1. <?php
  2.  
  3. function zipfile($file_path)
  4. {
  5. // 压缩多个文件
  6. $fileList = explode(',', $file_path);
  7. $filename = time() . ".zip"; // 压缩包所在的位置路径
  8. $zip = new ZipArchive();
  9. $zip->open($filename, ZipArchive::CREATE); //打开压缩包
  10. foreach ($fileList as $file) {
  11. $zip->addFile($file, basename($file)); //向压缩包中添加文件
  12. }
  13. $rs = $zip->close(); //关闭压缩包
  14.  
  15. //下载文件
  16. $file = fopen($filename, "r");
  17. //返回的文件类型
  18. Header("Content-type: application/octet-stream");
  19. //按照字节大小返回
  20. Header("Accept-Ranges: bytes");
  21. //返回文件的大小
  22. Header("Accept-Length: " . filesize($filename));
  23. //这里设置客户端的弹出对话框显示的文件名
  24. Header("Content-Disposition: attachment; filename=" . $filename);
  25. //一次性将数据传输给客户端
  26. //echo fread($file, filesize($filePath));
  27. //一次只传输1024个字节的数据给客户端
  28. //向客户端回送数据
  29. $buffer = 1024;//
  30. //判断文件是否读完
  31. while (!feof($file)) {
  32. //将文件读入内存
  33. $file_data = fread($file, $buffer);
  34. //每次向客户端回送1024个字节的数据
  35. echo $file_data;
  36.  
  37. }
  38. //将生成的zip文件在服务器端删除,只需要客户端下载就行了
  39. @unlink($filename);
  40.  
  41. }
  42.  
  43. zipfile('D:\phpstudy_pro\WWW\log.txt,D:\phpstudy_pro\WWW\index.html');
    前端传的参数是以逗号分隔传给我的路劲。

 

php压缩文件zip格式并打包(单个或多个文件压缩)的更多相关文章

  1. java实现将文件压缩成zip格式

    以下是将文件压缩成zip格式的工具类(复制后可以直接使用): zip4j.jar包下载地址:http://www.lingala.net/zip4j/download.php package util ...

  2. java压缩/解压缩zip格式文件

    因为项目要用到压缩.解压缩zip格式压缩包,只好自己封装一个,对于网上流行的中文乱码的问题,本文的解决方法是用apache的包代替jdk里的.基本上还是比较好用的. 废话少说,直接上代码. }     ...

  3. 【Maven jar】打包单个或多个文件,有依赖jar包的将架包一起打包成一个jar包供别的项目引用

    之前有一片文章,是打包单个java文件的.这次想要将http://www.cnblogs.com/sxdcgaq8080/p/8398780.html  打包成jar包,发现这个java文件中引用了多 ...

  4. webpack打包时排除其中一个css、js文件,或单独打包一个css、js文件

    在项目中经常会需要将一些接口的配合文件或者某些样式文件,分离出来单独打包,便于后期改动,这里我以css文件为例,介绍实现两种方法: 项目目录: 如上图所示,现在我需要将项目中的scBtn.css文件单 ...

  5. python(49):把文件压缩成zip格式的文件

    有时需要用到压缩文件,网上搜集了一段代码: 分享一下: import os import zipfile def make_zip(localPath, pname): zipf = zipfile. ...

  6. 列出zip文件内全部内容 当前目录下的所有文件压缩成zip格式的文件(file.zip)

    [root@ok Desktop]# zip -r image.zip ./*.jpg adding: 20161007_113743.jpg (deflated 0%) adding: 201610 ...

  7. python学习:备份文档并压缩为zip格式

    import os import time source = ['/root/notes'] target_dir = '/root/backup' if not os.path.exists(tar ...

  8. vue-webpack项目自动打包压缩成zip文件批处理

    为什么需要这个? 使用vue框架开发项目,npm run build这个命令会一直用到,如果需要给后端发包,那你还要打包成zip格式的压缩包,特别是项目提测的时候,一天可能要执行重复好几次,所以才有了 ...

  9. 多个文件下载打包生成zip格式下载

    这个多个文件下载生成zip格式必须先引用一个ICSharpCode.SharpZipLib.dll. 代码如下  //将多个文件打包成压缩文件zip格式下载         protected voi ...

随机推荐

  1. go--->共享内存和通信两种并发模式原理探究

    共享内存和通信两种并发模式原理探究 并发理解 人类发明计算机编程的本质目的是为了什么呢?毫无疑问是为了解决人类社会中的各种负责业务场景问题.ok,有了这个出发点,那么想象一下,比如你既可以一心一意只做 ...

  2. 004-OSI参考模型和分层思想

    OSI参考模型 应用层 所有能产生网络流量的程序 表示层 在传输之前是否进行加密或者压缩处理 涉及安全问题 会话层 Session 是建立在传输层之上,利用传输层提供的服务,使应用建立和维持会话,并能 ...

  3. YYC松鼠短视频系统上传视频会被压缩的问题如何解决?

    uni.chooseVideo({ count: 1, compressed: false, sourceType: ['album', 'camera'], success: (res) => ...

  4. ros中坐标系管理系统

    首先安装小海龟实例的功能包ros-melodic-turtle-tf  qqtsj  ~  sudo apt install ros-melodic-turtle-tf [sudo] qqtsj ...

  5. qt客户端程序使用svg图片资源的几种方法

    直接使用svg格式文件资源的情况 1. 直接在UI控件属性面板中选择部分支持icon图标的控件的icon来源,这样图标可以显示 2.给toolbutton添加样式 qproperty-icon: ur ...

  6. Codeforces Gym101234G Dreamoon and NightMarket(优先队列,子集和第k大)

    题意: 求子集和第k大,n,k<=1e6 思路: 优先队列经典题目,注意优先队列是默认按从大到小排的 代码: #include<iostream> #include<cstdi ...

  7. java10幸运抽奖

    public class jh_01_知识点回顾 { public static void main(String[] args) { int a = 10; // 变量.标签. // 重新给a赋值. ...

  8. Thread Based Parallelism - Thread Synchronization With Lock

    Thread Based Parallelism - Thread Synchronization With Lock import threading shared_resource_with_lo ...

  9. centos7 安装 iRedmail 后 给nginx添加虚拟主机

    iRedmail安装参考官方文档和 https://ywnz.com/linuxyffq/4563.html 准备工作 更新操作系统 yum update -y 安装必要组件 yum install ...

  10. 【人类观察所】"当代人"正经历的生活

    一."即时满足"的互联网 "轻微烦躁,偶尔自燃,当代生活多数时刻的心情基调." 如果你出生于上个世纪,应该能明白木心的<从前慢>里的 「从前的日色变 ...