SpringBoot项目中生成二维码

基础环境

SpringBoot、Maven

这里是使用了Hutool 的二维码生成工具类



二维码的生成基础,都是zxing包,这是Google开源的一个包

考虑到自行实现的难度,因此Hutool针对被广泛接受的的zxing库进行封装。

这里采用Hutool的方式实现


Hutool的是非强制依赖性,因此zxing需要用户自行引入,我们需要加入依赖。使用hutool的时候,com.google.zxing-javase的依赖可以不需要。

 <!-- 二维码支持包 -->
 <dependency>
     <groupId>com.google.zxing</groupId>
     <artifactId>core</artifactId>
     <version>3.3.0</version>
 </dependency>

QrCodeUtil 提供了几种生成方法


	/**
	 * 生成二维码到文件,二维码图片格式取决于文件的扩展名
	 *
	 * @param content    文本内容
	 * @param width      宽度
	 * @param height     高度
	 * @param targetFile 目标文件,扩展名决定输出格式
	 * @return 目标文件
	 */
	public static File generate(String content, int width, int height, File targetFile) {
		final BufferedImage image = generate(content, width, height);
		ImgUtil.write(image, targetFile);
		return targetFile;
	}

	/**
	 * 生成二维码到文件,二维码图片格式取决于文件的扩展名
	 *
	 * @param content    文本内容
	 * @param config     二维码配置,包括长、宽、边距、颜色等
	 * @param targetFile 目标文件,扩展名决定输出格式
	 * @return 目标文件
	 * @since 4.1.2
	 */
	public static File generate(String content, QrConfig config, File targetFile) {
		final BufferedImage image = generate(content, config);
		ImgUtil.write(image, targetFile);
		return targetFile;
	}


	/**
	 * 生成二维码到输出流
	 *
	 * @param content   文本内容
	 * @param width     宽度
	 * @param height    高度
	 * @param imageType 图片类型(图片扩展名),见{@link ImgUtil}
	 * @param out       目标流
	 */
	public static void generate(String content, int width, int height, String imageType, OutputStream out) {
		final BufferedImage image = generate(content, width, height);
		ImgUtil.write(image, imageType, out);
	}

	/**
	 * 生成二维码到输出流
	 *
	 * @param content   文本内容
	 * @param config    二维码配置,包括长、宽、边距、颜色等
	 * @param imageType 图片类型(图片扩展名),见{@link ImgUtil}
	 * @param out       目标流
	 * @since 4.1.2
	 */
	public static void generate(String content, QrConfig config, String imageType, OutputStream out) {
		final BufferedImage image = generate(content, config);
		ImgUtil.write(image, imageType, out);
	}

这里封装了工具类使 QrCodeUtil 更加满足项目的需求

import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.qrcode.QrCodeException;
import cn.hutool.extra.qrcode.QrCodeUtil;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.IOException;

@Slf4j
public class QrcodeUtil {

	private static final int WIDTH = 300;
	private static final int HEIGHT = 300;
	private static final String TYPE = ".png";

	/**
	 * 生成二维码到文件,二维码图片格式取决于文件的扩展名
	 *
	 * @param content  内容
	 * @param filePath 目标文件地址
	 * @return MultipartFile
	 */
	public static File createQrCodeToFile(String content, String filePath) {
		//拼接uuid,防止在高并发情况下,出现文件名重复的情况
		String fileName = IdUtil.simpleUUID() + TYPE;

		File dest = null;
		try {
			// 返回此抽象路径名的规范形式
			dest = new File(filePath + fileName).getCanonicalFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		File file = null;
		try {
			// 生二维码到文件
			file = QrCodeUtil.generate(content, WIDTH, HEIGHT, dest);
			log.info(StrUtil.format("生成二维码成功, 位置在:{}!", dest));
		} catch (QrCodeException e) {
			log.error("发生错误! {}!", e.getMessage());
		}
		return file;
	}

在配置文件中设置文件生成路径

# 文件存储路径
file:
  path: ./upload/
  # 文件大小 /M
  maxSize: 100
  avatarMaxSize: 5

得到文件名返回给前端

@Slf4j
@Service
@RequiredArgsConstructor
public class QRCodeService {
    
    private final FileProperties fileProperties;
   
    public String getQRCode(String codeContent) {
        try {
            File file = QrcodeUtil.createQrCodeToFile(questionnaireProcessDTO.getLink(), fileProperties.getPath());
            log.info("成功生成二维码!");
        } catch (Exception e) {
            log.error("发生错误, 错误信息是:{}!", e.getMessage());
        }
        return file.getName();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值