您的当前位置:首页 > 知识博客 > wordpress建站

批量导出 WordPress 中用户上传的照片并压缩为 Zip 文件供用户下载

时间:2024-04-03

小本本的学生管理系统

高考结束了,中考也跟着结束了,马上到了高中新生入学的日子,在新生入学的前夕,我们帮一个高中做了一个学生登记的管理系统。学校负责招生的老师把学生的中考信息导入到数据库后,系统会以学生的中考报名号为用户名,一个随机字符串为密码为学生生成一个用户,然后把密码通过短信发送给学生家长预留的手机号。

从信息上传到数据统计

上传信息只是第一步,整理使用这些信息才是这个系统最重要的功能,也是做这个系统的目的所在。比如,每个班每个尺寸的校服需要做多少件,哪个学生定的是哪个尺寸的校服?没做这个系统以前,都需要人工收集信息、统计、核对,可是个累人的活。做了这个系统以后,班主任只需要在后台点击一个下载按钮,统计信息就清清楚楚得下载下来了。然后把数据发送给校服供应商、收到校服后,根据打印出来的表格分发给学生,轻松多了。

批量导出用户上传的照片为Zip压缩包并自动下载

闲话扯得有点多了,我们来通过代码看一下其中批量导出用户照片的功能。

首先我们需要创建一个文件夹,导出的所有照片都放在这个文件夹里面,方便下一步的生成压缩包。然后我们获取照片,并根据需要重命名照片,把照片复制到上一步创建的文件夹里面。最后就是生成压缩包,供用户下载了,整个流程也就下面几行代码,非常简单。

/**
*导出用户上传的内容
*/
newDispatch([

	'export/([a-z]*)'=>function($request,$status="fexiang"){

		$dir=wp_upload_dir()['basedir'].'/export';
		$archive=wp_upload_dir()['basedir'].'/archive.zip';

		if(!is_dir($dir)){
			mkdir($dir);
		}

		//获取用户提交的内容
		$args=[
			'post_type'=>$status,
			'post_status'=>'any',
			'posts_per_page'=>-1,
		];

		$query=newWP_Query($args);

		//准备需要压缩的目录
		$folders=[];
		foreach($query->postsas$post){

			if($status==='fexiang'||$status==="zhufu"){
				$username=get_post_meta($post->ID,'_name',true);
			}else{
				$username=$post->post_title;
			}

			$user_dir=$dir.'/'.$username;

			//创建用户目录
			if(!is_dir($user_dir)){
				mkdir($user_dir,0700);
			}

			$folders[$username]=$user_dir;

			//获取用户上传的文件
			$files=get_post_meta($post->ID,'files',false);

			//复制用户上传的文件到用户目录中
			foreach($filesas$file){
				$image_path=get_attached_file($file);
				$filename=basename($image_path);

				copy($image_path,$user_dir.'/'.$filename);
			}
		}

		//先删除存档文件,然后再创建,编辑添加文件到存档中出错
		if(file_exists($archive)){
			unlink($archive);
		}
		$zippy=Zippy::load();
		$zippy->create($archive,$folders);

		wp_redirect(wp_upload_dir()['baseurl'].'/archive.zip');
		exit;

	},

]);

根据项目的实际情况,我们可以还有对上面的代码进行进一步的处理,比如当用户的照片不存在时,跳过处理,避免出错;把用户的照片和其他字段一起导出等等,上面的代码是在WordPress系统中实现的批量导出照片的功能,在其他系统中,肯定也有类似的辅助功能来帮助我们实现,如有需要,可以参考上面的代码进行实现。


欢迎咨询/Welcome to inquire
tel/vx:18842938855
qq:1685522781
email:1685522781@qq.com

Copyright © 2019-2024 thinkphp.xyz


Whatsapp