springboot+hutool批量生成二维码压缩导出功能

网友投稿 862 2022-09-21


springboot+hutool批量生成二维码压缩导出功能

目录1.引入依赖2.测试编码3.批量生成4.解析excel5.批量图片压缩6.上传excel直接将输出流转成压缩包

1.引入依赖

com.google.zxing

core

3.4.1

cn.hutool

hutool-all

5.7.14

2.测试编码

QrConfig config = new QrConfig(300, 300);

// 设置边距,既二维码和背景之间的边距

config.setMargin(3);

// 设置前景色,既二维码颜色(青色)

config.setForeColor(Color.CYAN);

// 设置背景色(灰色)

config.setBackColor(Color.GRAY);

// 生成二维码到文件,也可以到流

QrCodeUtil.generate("12345678", config, FileUtil.file("E:/image/12345678.jpg"));

3.批量生成

然而我们要批量生成不可能完全靠手输,接下来实现导入excel表批量生成。

需要引入poi依赖:

4.解析excel

org.apache.poi

poi-ooxml

5.0.0

准备好一份表格:

测试读取:

5.批量图片压缩

单张图片输出或下载也不方便,这时候我们要用到压缩

批量导出压缩文件

代码如下

/**

* 将文件打包成zip并下载

*/

@PostMapping(value = "xiazai",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

@ApiOperation("导出压缩包")

public void download(HttpServletResponse response) throws IOException {

response.setHeader("content-type", "application/octet-stream");

response.setHeader("Access-Control-Expose-Headers", "Conthttp://ent-Disposition");

response.setContentType("application/octet-stream");

response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=download.zip");

CompressUtil.createArchiver(CharsetUtil.CHARSET_UTF_8, ArchiveStreamFactory.ZIP,response.getOutputStream())

.add(FileUtil.file("E:/image"));

// ZipUtils.pngZip(response.getOutputStream(), qrImages);

}

6.上传excel直接将输出流转成压缩包

尝试上传excel生成二维码压缩包并下载(不会在服务器生成文件)

代码如下:

/**

* 图片内容与名字

*/

@Data

public class QrImage {

private byte[] bytes;

private String name;

}

/**

* 将生成的二维码字节流压缩导出

* @param outputStream

* @param qrImages

*/

public static void pngZip(OutputStream outputStream,List qrImages) {

//Zip输出流

ZipOutputStream zipOutputStream = null;

try {

zipOutputStream = new ZipOutputStream(outputStream);

for (QrImage file : qrImages) {

ZipEntry zipEntry = new ZipEntry(file.getName()+".png");

zipOutputStream.putNextEntry(zipEntry);

//写数据

zipOutputStream.write(file.getBytes(), 0, file.getBytes().length);

zipOutputStream.flush();

}

zipOutputStream.flush();

zipOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

// 关闭流

try {

if (zipOutputStream != null) {

zipOutputStream.close();

}

if (outputStream != null) {

outputStream.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 将文件打包成zip并下载

*/

@PostMapping(value = "xiazai",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

@ApiImplicitParam(name = "excelFile",value = "excel导入",required = true,dataType="MultipartFile",allowMultiple = true,paramType = "query")

@ApiOperation("导出压缩包")

public void download(@RequestParam("excelFile") MultipartFile file, HttpServletResponse response) throws IOException {

//读取excel

ExcelReader reader = ExcelUtil.getReader(file.getInputStream());

List> lists = reader.read();

//删除标题

lists.remove(0);

//批量生成二维码

List qrImages = create(lists);

response.setHeader("content-type", "application/octet-stream");

response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");

response.setContentType("application/octet-stream");

response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=download.zip");

// CompressUtil.createArchiver(CharsetUtil.CHARSET_UTF_8, ArchiveStreamFactory.ZIP,response.getOutputStream())

// .add(FileUtil.file("E:/image"));

ZipUtils.pngZip(response.getOutputStream(), qrImages);

}

public List create(List> list) throws FileNotFoundException {

QrConfig config = new QrConfig(300, 300);

// 设置边距,既二维码和背景之间的边距

config.setMargin(3);

// 设置前景色,既二维码颜色(青色)

config.setForeColor(Color.CYAN);

// 设置背景色(灰色)

config.setBackColor(Color.GRAY);

byte[] bytes=null;

List qrImages = new ArrayList();

QrImage qrImage;

// 生成二维码到文件,也可以到流

for (List objects : list) {

//将首列作为二维码内容

qrImage = new QrImage();

//将首列作为二维码内容

bytes = QrCodeUtil.generatePng(objects.get(0).toString(),

config.setImg("E:/image/logo.png"));

qrImage.setBytes(bytes);

qrImage.setName(objects.get(0).toString());

qrImages.add(qrImage);

}

return qrImages;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口管理软件有哪些?分享一款接口管理软件eoLinker怎么使用?
下一篇:静态路由使用bfd的两种方式-H3C(路由器BFD)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~