java批量下载图片生成zip并通过浏览器下载

Java批量下载图片并生成zip并通过浏览器下载,本文的图片存放在对象存储上。
分为三步:
1、配置相关参数
// 1 将SecretId和SecretKey修改成自己对应的内容
COSCredentials cred = new BasicCOSCredentials("SecretId", "SecretKey");
// 2 设置Region
ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing"));
// 3 生成cos客户端
COSClient cosClient = new COSClient(cred, clientConfig);
// 设置bucketName,该值可以在腾讯云控制台查看
String bucketName = "Bucket";

2、编写控制端代码

@RequestMapping("/downImageInfo")
public void downImageInfo(HttpServletRequest request,HttpServletResponse response){
	//下载时显示的名字
    String zipName = "imgtemp.zip";	
	ZipOutputStream zipOutputStream = null;
	// 设置响应类型,以附件形式下载文件
	response.reset();
	response.setHeader("Location", zipName);
	response.setHeader("Cache-Control", "max-age=0");
	response.setHeader("content-type", "application/octet-stream");
    response.setHeader("Content-disposition", "attachment;filename=" + zipName);
    response.setCharacterEncoding("utf-8");
	try {
		zipOutputStream = new ZipOutputStream(response.getOutputStream());
        //这是根据我自己的业务写的获取下载图片的列表
		List<StudentVO> list = signInfoService.listStudentImageInfo();
		// 循环根据路径从OSS获得对象,存入临时文件zip中
        int i=0;
		for (StudentVO vo : list) {
            //key是cos中对应的文件名,如果你数据库中有单独存放就不需要下面的截断和拼接操作
			String key = vo.getImagePath();
			String suffix="";
			if(key!=null){
				key = key.substring(key.lastIndexOf("/")+1);
				suffix = key.substring(key.indexOf("."));
			}else{
				key="";
			}
            //如果你的存储中有路径需要加上路径
			key = "head/"+key;
			// 根据path 和 bucket 从OSS获取对象
			GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
			InputStream is = cosClient.getObject(getObjectRequest).getObjectContent();
			// 将文件放入zip中,并命名不能重复,i主要是确保不会有重复的
			zipOutputStream.putNextEntry(new ZipEntry(vo.getActualName()+"-"+i+suffix));
			// 向压缩文件中写数据
			byte[] buff = new byte[1024];
	        int len;
	        while ((len = is.read(buff)) != -1) {
	             zipOutputStream.write(buff, 0, len);
	        }
	        zipOutputStream.closeEntry();
	        is.close();
			i++;
		}
		cosClient.shutdown();
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
        if (zipOutputStream != null) {
            try {
                zipOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

3、在页面添加访问路径

直接在组件上面添加click事件,事件中加入下面的语句

window.location.href=访问路径+"/downImageInfo";

如果你的是OSS可以将里面的内容替换下面的部分

1、在上面的代码For语句前面加入下面的代码
OSSClient ossClient=  OSSUtil.getInstance();
2、将下面的两句代码替换为指定的
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
InputStream is = cosClient.getObject(getObjectRequest).getObjectContent();
替换为
OSSObject ossObject = ossClient.getObject(OSSUtil.BUCKET, ossFile);
InputStream inputStream = ossObject.getObjectContent();

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StruggleRookie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值