图片打包下载,本地服务器打包文件下载,及线上图片地址下载

最近做的项目是一个图片的项目,刚开始偷懒上传到的是本机服务器上的路径地址,然后上传到线上一段时间之后,人多服务器带不起来了,就赶紧将图片地址由本机地址,上传到阿里云oss上,然后现在就开始遇见难题了,首先要判断地址是否是https请求的,如果是https请求的则替换方法,目前先将,本地服务器打包下载文件,和线上图片地址下载,访问打包下载放上,然后在整合代码。

本地服务器下载图片,打包下载
# 本机服务器打包下载  好的代码,现在欠缺的是 循环得出所有的图片地址
    public function downzip()
    {
		# 本机的图片地址
        $fileList = array(
            ROOT_PATH.'public/uploads/images/20200430/6ae71761fe4679d4f667159550fec794.jpg',
            ROOT_PATH.'public/uploads/images/20200506/1fc409f456bd4d048d4de19b46e9f203.jpg',
            ROOT_PATH.'public/uploads/images/20200506/fa1775a7e7cf8b4ecc69fea1069577ce.jpg'
        );

        $zip = new \ZipArchive; // 实例化zip对象
        $zip_time = time().".zip"; // 压缩的目录名
        $zip_filename = ROOT_PATH."public/uploads".$zip_time; // 指定一个压缩包地址,你当前项目的文件地址。
        $zip->open($zip_filename,\ZipArchive::CREATE);   //打开压缩包 如果没有则 创建

        # 对这个图片地址进行循环遍历,
        foreach($fileList as $file){

            # 循环遍历下载文件。
            $zip->addFile($file,basename($file));   //向压缩包中添加文件
        }
        $zip->close();  //关闭压缩包

        # 下载 文件
        header("Content-type:text/html;charset=utf-8");

        $file_name = iconv("utf-8","gb2312",$zip_time);

        # 将反斜杠 替换成正斜杠
        $file_path = str_replace('\\','/',$zip_filename);

        if(!file_exists($file_path)){
            echo "下载文件不存在!";exit;         //如果提示这个错误,很可能你的路径不对,可以打印$file_sub_path查看
        }

        $fp=fopen($file_path,"r");
        $file_size=filesize($file_path);

        //下载文件需要用到的头
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length:".$file_size);
        Header("Content-Disposition: attachment; filename = ". $file_name);
        $buffer=1024;
        $file_count=0;
        while(!feof($fp) && $file_count<$file_size){
            $file_con=fread($fp,$buffer);
            $file_count+=$buffer;
            echo $file_con;
        }
        fclose($fp);    //关闭这个打开的文件
        // unlink($zip_filename) // 开启之后,会自动将本机服务器上的zip包删除,首先可以降低资源,不好的是没有备份
    }
线上图片地址整合
# 线上地址 打包下载
    public function demo()
    {
        $files = [
            'https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3252521864,872614242&fm=26&gp=0.jpg',
            'https://dss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=4018557288,1217151095&fm=26&gp=0.jpg'
        ];

        $zip = new \ZipArchive;
        $zip_time = time().".zip"; // 可随机生成压缩的目录名
        $zip_filename = ROOT_PATH."public/uploads".$zip_time; // 指定一个压缩包地址
        $zip->open($zip_filename,\ZipArchive::CREATE);   //打开压缩包如果没有回自动创建

        foreach ($files as $file) {
            # 模拟curl访问发送请求
            $ch = curl_init(); # 初始化curl
            curl_setopt($ch, CURLOPT_POST, 0);
            curl_setopt($ch,CURLOPT_URL,$file);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 访问的是 ssl地址,不设置会报错
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $fileContent = curl_exec($ch); // 发送这个请求
            curl_close($ch);// 关闭curl;
            $zip->addFromString(basename($file), $fileContent);
        }
        $res = $zip->close();

        dump($res);//  如果为true则代表图片打包成功
        
        # 注意这个没有打包下载,如需打包下载,可参考上块代码,粘贴复制,找好路径即可。
    }

线上访问这个偷了懒,模拟curl请求,然后这个的速度会很慢,尤其是图片多了之后,这是因为没打包一次即代表发送了一次请求,所以这个的速度会很慢,还需要优化,新需求,因为本身我是要去oss上去下载图片,所以老板是说了可以不要直接打包下载,将oss上面的图片复制一份放到一个目录就行,下载的话让用户自己去下载就好了,再重新搞,正好oss的还不会用,勤学勤练,明天将数据库的导入导出搞定。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值