hutool工具类生成二维码案例
一、环境:
添加hutool工具类依赖,hutool生成二维码是利用Google的zixing,而且不是强依赖,所以还需引入zxing依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.4</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
二、生成二维码
1.生成二维码,写入response流中返回前端
后台代码:
/**
* 获取二维码
* yuanzidu
* @return
*/
@GetMapping("/getQRCode")
@ResponseBody
public void getQRCode(HttpServletResponse response) throws IOException {
String qrCodeUrl = "需要生成的内容";
try {
QrConfig qrConfig = new QrConfig(300, 300);
QrCodeUtil.generate(qrCodeUrl, qrConfig, "png", response.getOutputStream());
log.info("生成二维码成功!");
} catch (QrCodeException | IOException e) {
log.error("发生错误! {}!", e.getMessage());
}
}
前端接收:
<!-- 可用img标签进行接收 -->
<img th:src="xxxurl地址/getQRCode">
2.生成多个二维码并打包成zip下载
后台代码:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 打包成.zip选中的二维码
* yuanzidu
*/
@GetMapping("/getAllQRCode")
@ResponseBody
public void getAllQRCode(HttpServletResponse response) throws IOException {
Assert.hasLength(id, "主键不能为空.");
//设置响应参数
response.setContentType("application/zip");
response.setHeader("Content-disposition",
"attachment; filename=" + new String((StringUtils.replace("二维码列表_" + DateUtil.now(), " ", "_")).getBytes(),
"ISO-8859-1") + ".zip");
//zip流
OutputStream outputStream = response.getOutputStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
//根据id生成二维码
List<String> idList = new ArrayList<>();
idList.add("1");
idList.add("2");
idList.add("3");
idList.add("4");
//生成二维码并压缩进zip
for (String id : idList) {
String fileName ="二维码_"+id;
ZipEntry entry = new ZipEntry(fileName + "." + "PNG");
zipOutputStream.putNextEntry(entry);
QrCodeUtil.generate(id, 300, 300, ImgUtil.IMAGE_TYPE_PNG, zipOutputStream);
zipOutputStream.flush();
}
zipOutputStream.close();
outputStream.flush();
outputStream.close();
}
前端代码:
<script>
function downloadFile(){
window.location.href = "url地址/getAllQRCode";
}
</script>