php 批量下载pdf,PHP中通过ZipArchive批量下载pdf文件

标签:浏览器   强制   creat   UNC   关闭   scan   获取   tin   dir

PHP中通过ZipArchive批量下载pdf文件

场景

通过点击一个按钮批量下载远程pdf文件

步骤

1.获取远程文件内容,写入临时目录和文件

2.将临时目录打包

3.下载打包文件

4.下载后删除临时文件

代码部分

//文件地址

$file_path = [

‘http://localhost:8888/1.pdf‘,

‘http://localhost:8888/2.pdf‘,

‘http://localhost:8888/3.pdf‘,

‘http://localhost:8888/4.pdf‘,

];

//利用ZipArchive实现打包

$zip = new \ZipArchive();

$zip_path = ‘./temp/‘;

$zip_name = ‘temp.zip‘;

$zip_file = $zip_path . $zip_name;

if ($zip->open($zip_file, \ZipArchive::CREATE)) {

foreach($file_path as $v) {

//获取文件内容

$file_content = file_get_contents($v);

//写入临时文件(没有temp目录的需要先手动创建或用mkdir创建)

$temp_file_path = $zip_path . ‘temp_‘ . time() . rand(1000, 9999) . ‘.pdf‘;

//创建临时目录

if (!is_dir($zip_path)) {

if ((mkdir($zip_path, 0777, true)) === false) {

return ‘临时目录创建失败!‘;

}

}

//写入文件

$temp_file = file_put_contents($temp_file_path, $file_content);

if (!$temp_file) {

continue;

}

//文件写入zip中

$zip->addFile($temp_file_path);

}

//关闭

$zip->close();

}

//设置下载zip的头信息

header(‘Content-Type: application/zip‘); //zip压缩文件

header("Content-Transfer-Encoding: Binary"); //二进制传输

header("Content-Type:application/force-download"); //强制下载

header("Content-Disposition: attachment; filename=" . $zip_name); //告诉浏览器下载并设置文件名

readfile($zip_file);

//下载后删除临时目录(delete_dir方法见下方)

if (is_dir($zip_path)) delete_dir($zip_path);

/**

* 删除目录

*/

if (!function_exists(‘delete_dir‘)) {

function delete_dir($path)

{

if (!is_dir($path)) {

return false;

}

$dirs = scandir($path);

foreach ($dirs as $dir) {

if ($dir == ‘.‘ || $dir == ‘..‘) {

continue;

}

if (is_dir($path . $dir)) {

delete_dir($path . $dir);

} else {

@unlink($path . $dir);

}

}

@rmdir($path);

}

}

参考

php中文手册

PHP中通过ZipArchive批量下载pdf文件

标签:浏览器   强制   creat   UNC   关闭   scan   获取   tin   dir

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot实现批量下载PDF文件可以通过以下步骤进行操作: 1. 首先,创建一个Controller类,使用`@RestController`和`@RequestMapping`注解来定义请求路径。在该类,注入一个文件服务的实现类,用于处理文件下载的逻辑。例如,可以使用`@Autowired`注解将`FileServiceImpl`注入到`FileController`。 2. 在Controller类,创建一个GET请求的方法,用于批量下载附件并将其打包成zip文件。可以使用`@GetMapping`注解来定义请求路径。在该方法,接收一个`HttpServletResponse`参数,用于将文件流写回响应。 3. 在该方法,调用文件服务的方法来实现批量下载附件并打包成zip文件。具体的实现逻辑可以在`FileServiceImpl`完成。 4. 在`FileServiceImpl`,可以使用Hutool工具类来处理文件下载和打包操作。可以使用`ZipUtil`类来创建一个zip文件,并使用`FileUtil`类来读取和写入文件流。 5. 最后,将打包好的zip文件写回响应,完成文件批量下载。 下面是一个示例的代码片段,展示了如何在Spring Boot实现批量下载PDF文件: ```java @RestController @RequestMapping("/file/") public class FileController { @Autowired private FileServiceImpl fileService; @GetMapping("/down/zip/") public void downToZip(HttpServletResponse response) throws FileNotFoundException { fileService.downToZip(response); } } ``` ```java @Service public class FileServiceImpl { public void downToZip(HttpServletResponse response) throws FileNotFoundException { // 使用Hutool工具类创建一个zip文件,并将多个PDF文件添加到zip ZipUtil.zip("path/to/zip/file.zip", "path/to/pdf/file1.pdf", "path/to/pdf/file2.pdf", ...); // 读取zip文件并将文件流写回响应 FileUtil.writeToStream(new File("path/to/zip/file.zip"), response.getOutputStream()); } } ``` 请注意,上述代码仅为示例,实际的路径和文件名需要根据实际情况进行修改。同时,还需要确保在项目的依赖添加了Hutool工具类的相关依赖。 希望以上信息对您有所帮助!\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [springboot 批量下载附件接口,打包成zip](https://blog.csdn.net/ql_7256/article/details/129212815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值