php 下载图片并打包成Zip格式压缩包
前言:最近公司有个需要下载多个图片并打包成压缩包的需求,下面来看看具体是怎么做的
1、没什么说的,懒得说啥,直接看代码
/**
* 下载图片并生成压缩包
* @param $data 图片数组,一维
* @param $tmpDir 存放路径
* @return string
*/
public function downloadZipImg()
{
$picAllArr = ['http://www.dada.com/a.jpg','http://www.dada.com/b.jpg']; $tmpDir = '这里是图片下载路径目录'; // 类似于/www/public/upload/ if (!file_exists($tmpDir)) {
//创建文件夹
mkdir($tmpDir, 0777, true);
} $zipName = date('His') . mt_rand(1000, 9999) . '.zip'; // 压缩包文件名
$zipNameUrl = $tmpDir . $zipName; // 文件路径 // 生成文件
$zip = new \ZipArchive();
if ($zip->open($zipNameUrl, \ZipArchive::OVERWRITE) !== true) {
//OVERWRITE 参数会覆写压缩包的文件 文件必须已经存在
if ($zip->open($zipNameUrl, \ZipArchive::CREATE) !== true) {
// 文件不存在则生成一个新的文件 用CREATE打开文件会追加内容至zip
return '下载失败,文件夹不存在';
}
} foreach ($picAllArr as $file) {
//判断图片是否存在
$isFile = $this->checkFileExists($file);
if (!$isFile) {
continue;
}
//抓取图片内容
$fileContent = file_get_contents($file);
//添加图片
$zip->addFromString(basename($file), $fileContent);
}
// 关闭
$zip->close(); //没有文件
if (!file_exists($zipNameUrl)) {
return '下载失败,图片不存在或无法下载';
} header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename=' . $zipName); //文件名
header("Content-Type: application/zip"); //zip格式的
header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
header('Content-Length: ' . filesize($zipNameUrl)); //告诉浏览器,文件大小 // 下面2步必须要
ob_clean();
flush(); @readfile($zipNameUrl);
unlink($zipNameUrl); // 删除文件
exit;
}
/**
* 判断文件是否存在,支持本地及远程文件
* @param String $file 文件路径
* @return Boolean
*/
private function checkFileExists($file)
{
// 远程文件
if (strtolower(substr($file, 0, 5)) == 'https') {
// 远程文件
$header = get_headers($file, true);
return isset($header[0]) && (strpos($header[0], '200') || strpos($header[0], '304')); } elseif (strtolower(substr($file, 0, 4)) == 'http') {
// 远程文件
$header = get_headers($file, true);
return isset($header[0]) && (strpos($header[0], '200') || strpos($header[0], '304'));
} else {
// 本地文件
return file_exists($file);
}
}
上面代码注释已经很清晰了,已经不需要在特殊说明了,这是亲测有效的代码,不然也不会拿出来,访问的时候,别用ajax来请求,因为浏览器不让ajax操作流文件,只能读,所以通过href地址栏的方式访问就能下载了。
具体原因如下:

以上就是本篇文章的全部内容了
php 下载图片并打包成Zip格式压缩包的更多相关文章
- 关于springmvc下服务器文件打包成zip格式下载功能
关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主 ...
- java批量下载,将多文件打包成zip格式下载
现在的需求的: 根据产品族.产品类型,下载该产品族.产品类型下面的pic包: pic包是zip压缩文件: t_product表: 这些包以blob形式存在另一张表中: t_imagefile表: 现在 ...
- 阿里云打包成zip格式,批量下载
/** * 从阿里云下载文件 (以附件形式下载) 多个文件进行zip下载 第二种 * @param request * @param response */ @ResponseBody @Reques ...
- java批量将多文件打包成zip格式
public void createzip(){ List<File> nFileList = new ArrayList<File>(); nFileList.add(new ...
- Springboot生成二维码并下载图片png支持打包成zip
pom.xml <!--二维码--> <dependency> <groupId>com.google.zxing</groupId> <arti ...
- springboot中使用freemarker生成word文档并打包成zip下载(简历)
一.设计出的简历模板图以及给的简历小图标切图 二.按照简历模板图新建简历word文件 :${字段名},同时将图片插入到word中,并将建好的word文件另存为xml文件: 三.直 ...
- 将多张图片打包成zip包,一起上传
1.前端页面 <div class="mod-body" id="showRW" style="text-align: center;font- ...
- java实现将文件压缩成zip格式
以下是将文件压缩成zip格式的工具类(复制后可以直接使用): zip4j.jar包下载地址:http://www.lingala.net/zip4j/download.php package util ...
- java将文件打包成ZIP压缩文件的工具类实例
package com.lanp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
随机推荐
- 分享:JS视频在线视频教程
作者说明 (1)JS说明 JS是非常重要的一门语言,但是,我们对JS的认识似乎仍然停留在“hello word”或者“alert”的观念上.其实,JS发展到现在已经非常的成熟,功能也非常的强大,因此, ...
- django中app分组
08.13自我总结 django中app分组 一.django路由系统app进行分组 1.创建app 使用pycharm创建django的时候, 加上app的名字,后续多个app只需复制粘贴之前app ...
- Java应用在docker环境配置容器健康检查
在<极速体验docker容器健康>一文已体验了docker容器健康检查功能,今天就来给java应用的容器加入健康检查,使应用的状态随时都可以被监控和查看. 实战环境信息 操作系统:macO ...
- java学习3-流程控制与数组
1.顺序结构 2.分支结构 3.循环结构 4.控制循环结构 break continue return 5.数组
- 原来热加载如此简单,手动写一个 Java 热加载吧
1. 什么是热加载 热加载是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般不会用于正式的生产环 ...
- 关于while和do while 的个人理解
先上代码 int x=425; System.out.println("循环开始,我的初始值为:x="+x); //425 do { System.out.println(&quo ...
- mysql8 的安装和设置
mysql8的安装 写在前面 与5.*的版本整体差不多,但是安装细节决定成败 下载 点击https://dev.mysql.com/downloads/file/?id=476233,也可以点这里,有 ...
- 身为一个 CS专业的留学生,你还在为堆积如山的编程assignment而发愁吗?
每个人都渴望圆梦,当我们看见梦想在别人身上实现时,总在抱怨幸运之神为何不眷顾自己:其实更多的时候,梦想就在你身边的不远处,只要你迈出正确的步伐. 记得刚入大学时,意气风发.我以全班前几名的优异成绩考入 ...
- 误删除 mySQL 用户解决办法
误删除用户解决办法 删除用户 删除用户 mysql> truncate mysql.user;Query OK, 0 rows affected (0.05 sec)mysql> sel ...
- fenby C语言 P17
for姐姐 dowhile妹妹 while for(循环变量赋初值,循环条件,循环变量自加) #include <stdio.h> int main(){ int sum=0,i; for ...