php zip下载附件到压缩包并浏览器下载
/**
* 下载图片并生成压缩包
* @param $arr 资源数组
* @return string
*/
function downloadZipImg($arr)
{if(is_array($arr)&&$arr){
foreach ($arr as $key=>$val){$array=array();$array['img']='';//资源存放地址$array['YFJMC']='';//资源重命名名称
$picAllArr[]=$array;
}
}else{
echo "下载失败,请选择资源";
die();
}
$tmpDir = ''; // 存放路径 绝对路径/相对路径 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
echo "下载失败,文件夹不存在";
die();
}
} foreach ($picAllArr as $file=>$fileval) {
//判断图片是否存在
$isFile = checkFileExists($fileval['img']);
if (!$isFile) {
continue;
}
//抓取图片内容
$fileContent = file_get_contents($fileval['img']);
//添加图片
$zip->addFromString(basename($fileval['img']), $fileContent);
//重命名文件
$zip->renameName(basename($fileval['img']), $fileval['YFJMC']);
}
// 关闭
$zip->close(); //没有文件
if (!file_exists($zipNameUrl)) {
echo "下载失败,图片不存在或无法下载";
die();
}
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
*/
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);
}
}
php zip下载附件到压缩包并浏览器下载的更多相关文章
- java开发在线下载功能,自动打开浏览器下载功能下载网络文件或图片
因为业务的需要,公司产品要求商品详情页面有个下载的功能 找了很多的方法,发现有的需要打开一个新窗口,而且在某些浏览器上不适用,所以继续寻找更好的方法 跟同事沟通后发现他那里有个下载的方法,不过是C#写 ...
- Selenium 设置浏览器下载 Firefox 和Chrome
当我们在使用Selenium运行自动化测试时,偶尔需要用到下载功能,但浏览器的下载可能会弹出下载窗口,或者下载路径不是我们想要保存的位置,所以在通过Selenium启动浏览器时需要做相关的设置,将使这 ...
- java如何压缩多个文件到压缩包,并下载到浏览器?
java压缩多个文件到压缩包,并下载到浏览器 解决方法: 完整的方法如下,很简单,亲试有效,极力推荐. 我是以流作为文件,而不是file,循环把所有pdf文件压缩到pdf.zip压缩包中. 1.前 ...
- Nginx 配置下载附件让浏览器提示用户是否保存
Nginx配置下载附件让浏览器提示用户是否保存 by:授客 QQ:1033553122 测试环境 nginx-1.10.0 问题描述: 前端页面,IE11浏览器下请求下载附件模板,针对xls ...
- php 通过header下载中文文件名 压缩包损坏或文件不存在的问题
开发中大家都是使用的utf8编码,昨天遇到一个奇坑,本是一件很小的问题,解决也浪费了个吧小时.废话不多说,植入正题: 文件下载方式:通过header二进制流文件下载需求: 文件上传保留文件名不变数据字 ...
- C# 导出excel的压缩包到浏览器页面
需求背景:TCX_1710项目产品质量导出功能,客户希望每个总成导出到一个Excel表中 实现分析:客户选择时间段,点击导出按钮,默认导出开始时间当天的数据,每个总成一个Excel,将各个Excel打 ...
- Firefox下载附件乱码的解决办法
通过在http的header里设置fileName下载附件时,中文文件名通过chrome浏览器下载时正常,通过firefox下载时为乱码: 原来的Java代码: response.addHeader( ...
- asp.net 浏览器下载文件的四种方式
// 方法一:TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { Response.ContentT ...
- java上传附件,批量下载附件(一)
上传附件代码:借助commons-fileupload-1.2.jar package com.str; import java.io.BufferedInputStream;import java. ...
- 在Linux终端使用W3M浏览器下载文件
在Linux终端使用W3M浏览器下载文件 W3M 是3个基于Linux系统命令行的WEB网站浏览工具(w3m/Links/Lynx) 对于需要验证cookie 和来源的页面,比如163的超大附件,直接 ...
随机推荐
- **手把手教你安装 Anaconda + Tensor flow+Pycharm**
手把手教你安装 Anaconda + Tensor flow+Pycharm 这篇博文主要讲一下自己安装Anaconda + Tensor flow + Pycharm 的一个过程. 1. ANACO ...
- 使用kubeoperator安装的k8s集群以及采用的containerd容器运行时,关于采用的是cgroup 驱动还是systemd 驱动的说明
使用kubeoperator安装的k8s集群,默认使用的是systemd驱动 # kubectl get cm -n kube-system NAME DATA AGE calico-config 4 ...
- 前端安全配置xss预防针Content-Security-Policy(csp)配置详解
文章转载自:https://www.xaheimi.com/jianzhan/117.html 什么是Content Secruity Policy(CSP) CSP全称Content Securit ...
- Elasticsearch:单节点数据迁移
Elasticsearch数据迁移:windows单节点迁移到windows 将源数据中的ES安装目录下的data/nodes目录整体拷贝到目标ES的对应目录下 迁移前请备份:迁移后需要重启ES: E ...
- gitlab添加新用户
添加用户的时候没法给用户设置密码,可以等用户添加后,编辑用户的时候给用户设置密码 新用户首次登陆后需要重置密码 新用户登陆后是英文界面,设置成中文界面
- Elasticsearch:反向代理及负载均衡在 Elasticsearch 中的应用
文章转载自:https://elasticstack.blog.csdn.net/article/details/108365746
- vue this.$router.push query传递对象方法
this.$router.push({ path: '/home', query: { params: JSON.stringify({ name: 'lokka', age: 18 }) } }); ...
- 2022.9.17 Java第二次课总结
以下是本节课后的问题 首先是关于静态变量 在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个 ...
- 为Azure-云准备一个基于Red Hat 8.x 的虚拟机镜像
由于公司最近要求部分项目上线到Azure云上,要求操作系统使用的Redhat 8.x,而且必须加固 而在Azure官网提供的镜像中,又没有Redhat,于是只有自己自定义Redhat镜像,最后加固,作 ...
- 220726 T2 Multisets (思维)
题目描述 我们说一个可重集 AA 比可重集 BB 小,当且仅当对于两个可重集中出现次数不同的最小元素 xx ,元素 xx 在 AA 中出现次数更多. 例如,可重集 {1,2,3}1,2,3 就比可重集 ...