大概需求:
每一个订单都有多个文件附件,在下载的时候希望对当前订单的文件自动打包成一个压缩包下载
细节需求:当前订单号_年月日+时间.zip 例如:
1.生成压缩文件,压缩文件名格式:
2.压缩文件存放在根目录 /upload/zipfile/年月/自定义的压缩文件名.zip
3.点击下载压缩包,系统开始对压缩文件打包,打包完成后自动开始下载
4.为了防止暴露压缩包文件路径,需要对下载的压缩包文件名改名
具体操作模式请见下面的代码:
文件路径:
压缩包文件存放路径:/upload/zipfile/
上传的附件存放路径:/upload/file/
1.基本配置文件文件 config.inc.php放在系统根目录
define('SYS_ROOT', str_replace("\\", '/', dirname(__FILE__))); define('SYS_UPLOAD', SYS_ROOT.'/upload/file'); define('SYS_DOWNLOAD', SYS_ROOT.'/upload/zipfile'); define('SYS_WIN', strpos(strtoupper(PHP_OS), 'WIN') !== false ? true: false); define('SYS_CHMOD', ('0777' && !SYS_WIN) ? '0777' : 0);
2.压缩包程序代码文件 getzip.php
header("Content-type: text/html; charset=utf-8"); require_once '../config.inc.php'; //载入配置路径配置文件 $arrfiles = array(SYS_UPLOAD . '/1.jpg', SYS_UPLOAD . '/x.jpg',); //这里是附件的文件数组 $orderNum = '888'; //订单号 $downFileName = 'tieniu.zip'; //下载的文件名 如果为空那么就是系统自定义名称 如果指定就显示指定名字 $zipUrl = create_zip($arrfiles, $orderNum); //生成的压缩文件名词 file_down($zipUrl, $downFileName); //提供http下载,并可以进行重命名下载文件,建议重命名,防止路径猜解 /* * 生成压缩包文件名 * @param [String] $orderNum 订单号 * @return [String] 返回带有绝对路径的订单号的压缩文件名 */ function get_zipname($orderNum) { $zipName = SYS_DOWNLOAD . '/' . date('Ym') . '/' . $orderNum . '_' . date("Ymd_Hi") . '.zip'; return $zipName; } /* * 按照特定需求打包压缩包的目录结构设置 */ function pack_object() { } /* * 生成压缩包 * @param [Array] $arrfiles 带有绝对路径的文件数组 * @param [String] $orderNum 订单号 * @return [String] 返回带有绝对路径的订单号的压缩文件名 如如果失败返回 FALSE */ function create_zip($arrfiles, $orderNum) { $zipName = get_zipname($orderNum); //获得文件名 dir_create(dirname($zipName)); //建立生成压缩文件的目录 $zip = new ZipArchive(); if ($zip->open($zipName, ZIPARCHIVE::CREATE) !== TRUE) { return FALSE; } foreach ($arrfiles as $path) { if (is_file($path)) {//判断文件是否存在 $zip->addFile($path, basename($path)); //把文件加入到压缩包中 } } $zip->close(); return $zipName; } /* * 处理文件目录 * @param [Array] $arrfiles 带有绝对路径的文件数组 * @param [String] $dirpath 文件路径 * @return [String] 返回处理的文件路径,方便生成文件目录 */ function dir_path($dirpath) { $dirpath = str_replace('\\', '/', $dirpath); if (substr($dirpath, -1) != '/') $dirpath = $dirpath . '/'; return $dirpath; } /* * 生成文件目录 * @param [String] $path 文件路径 * @return [String] 返回生成的文件目录结构 */ function dir_create($path) { if (is_dir($path)) return true; $dir = str_replace(SYS_DOWNLOAD . '/', '', $path); $dir = dir_path($dir); $temp = explode('/', $dir); $cur_dir = SYS_DOWNLOAD . '/'; $max = count($temp) - 1; for ($i = 0; $i < $max; $i++) { $cur_dir .= $temp[$i] . '/'; if (is_dir($cur_dir)) continue; @mkdir($cur_dir); if (SYS_CHMOD) @chmod($cur_dir, SYS_CHMOD); if (!is_file($cur_dir . '/index.html') && !is_file($cur_dir . '/index.php')) file_copy(SYS_ROOT . '/upload/index.html', $cur_dir . '/index.html'); } return is_dir($path); } /* * 文件COPY * @param [String] $from copy源文件 * @param [String] $to copy文件目的地 * @return [Bool] 成功 ture 失败 false */ function file_copy($from, $to) { dir_create(dirname($to)); if (is_file($to) && SYS_CHMOD) @chmod($to, SYS_CHMOD); if (@copy($from, $to)) { if (SYS_CHMOD) @chmod($to, SYS_CHMOD); return true; } else { return false; } } /* * 文件下载处理函数 * @param [String] $file 文件路径 * @param [String] $filename 下载时间重新命名的文件名 * @param [String] $data 下载文件填装的数据内容 */ function file_down($file, $filename = '', $data = '') { if (!$data && !is_file($file)) exit; $filename = $filename ? $filename : basename($file); $filetype = file_ext($filename); $filesize = $data ? strlen($data) : filesize($file); ob_end_clean(); @set_time_limit(0); if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); } else { header('Pragma: no-cache'); } header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Content-Encoding: none'); header('Content-Length: ' . $filesize); header('Content-Disposition: attachment; filename=' . $filename); header('Content-Type: ' . $filetype); if ($data) { echo $data; } else { readfile($file); } exit; } function file_ext($filename) { return strtolower(trim(substr(strrchr($filename, '.'), 1))); } //此函数未用到,用来做整个目录的打包下载 function listdir($start_dir = '.') { $files = array(); if (is_dir($start_dir)) { $fh = opendir($start_dir); while (($file = readdir($fh)) !== false) { if (strcmp($file, '.') == 0 || strcmp($file, '..') == 0) continue; $filepath = $start_dir . '/' . $file; if (is_dir($filepath)) $files = array_merge($files, listdir($filepath)); else array_push($files, $filepath); } closedir($fh); } else { $files = false; } return $files; }
3.PHP程序生成压缩文件需要用到压缩类:ZipArchive
这个是php的扩展类,自php5.2版本以后就已经支持这个扩展,如果你在使用的时候出现错误,查看下php.ini里面的extension=php_zip.dll前面的分号有没有去掉,然后再重启Apache这样才能使用这个类库。
本文向大家介绍Java生成压缩文件的实例代码,包括了Java生成压缩文件的实例代码的使用技巧和注意事项,需要的朋友参考一下 在工作过程中,需要将一个文件夹生成压缩文件,然后提供给用户下载。所以自己写了一个压缩文件的工具类。该工具类支持单个文件和文件夹压缩。放代码: 运行程序结果如下: 压缩之前的文件目录结构: 提示:如果是使用java.util下的java.util.zip进行打包处理,可
问题内容: 我想解压缩文件,这可以正常工作 但是我需要通过URL传递文件名,而无法使其正常工作,这就是我所拥有的。 我想念什么?我知道这一定是我忽略的小而愚蠢的事情。 谢谢, 问题答案: 我只能假设您的代码来自在线某个地方的教程?在这种情况下,请尝试自己解决这个问题。另一方面,该代码实际上可以在线发布为解压缩文件的正确方法,这有点令人恐惧。 PHP具有用于处理压缩文件的内置扩展。不需要为此使用调用
我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?
本文向大家介绍php使用ZipArchive函数实现文件的压缩与解压缩,包括了php使用ZipArchive函数实现文件的压缩与解压缩的使用技巧和注意事项,需要的朋友参考一下 PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法这里就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流。这里整
我使用generation作为API文档生成的Maven插件。我希望生成的文档被压缩,到目前为止还没有找到这样做的方法。文档是在一个目录中生成的,而不是在一个zip文件中。以下是摘自我的pom: 依赖关系: 我用的是发音版本1.26.2。
本文向大家介绍PHP 实现文件压缩解压操作的方法,包括了PHP 实现文件压缩解压操作的方法的使用技巧和注意事项,需要的朋友参考一下 在php中,有时我们需要使用到压缩文件操作,压缩文件可以节省磁盘空间;且压缩文件更小,便于网络传输,效率高,下面我们就来了解php的压缩解压相关操作 在PHP中有一个ZipArchive类,专门用于文件的压缩解压相关操作 在ZipArchive类中主要使用到了如下方法