SpringBoot生成二维码并扫码

文章目录

  • 一、引入依赖
  • 二、配置
    • 1.yml配置
    • 2.配置文件实体
    • 二维码生成工具类
  • 三、接口测试
  • 测试
    • 1、生成二维码
    • 手机扫码测试
  • 结束 ★★★★★


一、引入依赖

ZXing 是一个开源的条形码和二维码图像处理库,它提供了生成、解码和识别各种格式的条形码和二维码的功能。

<!-- 二维码生成 -->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.2.1</version>
</dependency>

二、配置

1.yml配置

注意路径配置

# 应用服务 WEB 访问端口
server:
  port: 8080


# 二维码配置
qrCode:
  # 二维码url地址
  codeUrl: http://192.168.0.221:8080/code/codeUrl/
  # win路径
  codePath: C:/qr
  # linux路径
#  codePath: /qr

2.配置文件实体

`
代码如下(示例):

/**
 * @description: 二维码配置实体
 * @program: ws-netty
 * @create: 2024-04-12 15:10
 * @author: whe
 **/
@Data
@Component
public class QrCodeConfig {

    @Value("${qrCode.codeUrl}")
    private String codeUrl;

    @Value("${qrCode.codePath}")
    private String codePath;
    
}

二维码生成工具类

/**
 * @description 将指定url转为二维码图片
 * @since 2020-11-05 16:58
 */
@Slf4j
public class QRCodeHelper {
	private static final int BLACK = 0xFF000000;
	private static final int WHITE = 0xFFFFFFFF;

	/**
	 * 二维码生成
	 * @param url: url地址
	 * @param path:二维码存储路径
	 * @param fileName:二维码文件名
	 * @return: 二维码地址
	 */
	public static String createQrCode(String url, String path, String fileName) {
		try {
			Map<EncodeHintType, String> hints = new HashMap<>();
			hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
			 BitMatrix bitMatrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, 400, 400, hints);
			File file = new File(path, fileName);
			if (file.exists() || ((file.getParentFile().exists() || file.getParentFile().mkdirs()) && file.createNewFile())) {
				writeToFile(bitMatrix, "jpg", file);
				log.info("生成二维码图片:" + file);
				return file.toString();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	static void writeToFile(BitMatrix matrix, String format, File file) throws IOException {
		BufferedImage image = toBufferedImage(matrix);
		if (!ImageIO.write(image, format, file)) {
			throw new IOException("Could not write an image of format " + format + " to " + file);
		}
	}

	private static BufferedImage toBufferedImage(BitMatrix matrix) {
		int width = matrix.getWidth();
		int height = matrix.getHeight();
		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		for (int x = 0; x < width; x++) {
			for (int y = 0; y < height; y++) {
				image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
			}
		}
		return image;
	}
}

三、接口测试

如果需要删除二维码,放开注释部分即可

/**
 * @description: 测试控制层
 * @program: ws-netty
 * @create: 2024-04-12 14:46
 * @author: whe
 **/
@RequestMapping("/code")
@RestController
public class QrCodeController {

    @Autowired
    private QrCodeConfig qrCodeConfig;
    /** 存储生成的二维码,用于删除 */
//    private static List<File> qRCodeImgList = new ArrayList<>();

    /**
     * 生成二维码
     * @param name: 二维码url参数(实际根据业务处理)
     * @return
     */
    @GetMapping("/create")
    public String createCode(String name){
        String url = qrCodeConfig.getCodeUrl() + "?name=" + name;
        String qrCodeImgPath = QRCodeHelper.createQrCode(url, qrCodeConfig.getCodePath(), name + ".jpg");
//        File file = new File(qrCodeImgPath);
//        qRCodeImgList.add(file);
        return qrCodeImgPath;
    }


    /**
     * 二维码url地址
     * @param name: 生成时携带的参数
     * @return
     */
    @GetMapping("/codeUrl")
    public String codeUrl(String name) {
        String msg = "获取二维码值为: " + name;
        System.out.println(msg);
//        if (qRCodeImgList != null){
//            qRCodeImgList.forEach(vo -> {
//                vo.delete();
//                System.out.println("删除二维码图片: " + vo.getAbsolutePath());
//            });
//            qRCodeImgList.clear();
//        }
        return msg;
    }
}

测试

1、生成二维码

访问生成二维码接口地址:http://ip:8080/code/create?name=kun
在这里插入图片描述
本地正常生成文件
在这里插入图片描述

手机扫码测试

手机扫码需要跟电脑要在同一局域网,电脑直接扫码没有问题
此处的返回结果只是案例,可以根据实际业务跳转到对应的静态页面,返回业务需要的数据

在这里插入图片描述


结束 ★★★★★

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/538755.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【word2pdf】Springboot word转pdf(自学使用)

文章目录 概要整体介绍具体实现官网pom文件增加依赖 遇到的问题本地运行OK&#xff0c;发布到Linux报错还是本地OK&#xff0c;但是Linux能运行的&#xff0c;但是中文乱码 小结 概要 Springboot word 转 pdf 整体介绍 搜了一下&#xff0c;发现了能实现功能的方法有四种 U…

ruoyi-nbcio-plus基于vue3的flowable的自定义业务显示历史信息组件的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

多 线 程

1&#xff0e;什么是多线程? 有了多线程&#xff0c;我们就可以让程序同时做多件事情 2.多线程的作用? 提高效率 3&#xff0e;多线程的应用场景? 只要你想让多个事情同时运行就需要用到多线程 比如:软件中的耗时操作、所有的聊天软件、所有的服务器 1.进程和线程【理解】 …

mybiats-puls-插入测试以及雪花算法

一&#xff0c;测试 /* * 插入测试 * */ Test public void test01() {User user new User();/** 自动帮我们生成id* */user.setName("kuku");user.setAge(3);user.setEmail("2983394967qq.com");final int insert mapper.insert(user);System.out.print…

OceanMind海睿思入选《2024 中国MarTech行业生态图》

「Morketing研究院」正式发布《2024 中国MarTech行业生态图》&#xff0c;中新赛克海睿思作为国内数据治理优秀厂商&#xff0c;成功入选「数据与分析」板块「数据管理平台」子类&#xff0c;占据Martech领域关键节点。 ◎《2024中国MarTech行业生态图》 关于MarTech生态图 《…

【Django开发】前后端分离美多商城项目第7篇:登录,使用登录的流程【附代码文档】

美多商城项目4.0文档完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;美多商城&#xff0c;项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业,5.O2O--线上到线下,6.F2C--工厂到个人。项目准备&#xff0c;配置1. 修改set…

记录一次Java中使用P12证书访问https,nginx返回403的问题

目录 1、先使用浏览器导入证书访问&#xff0c;测试证书和密钥是否正确2、编写初始java代码3、结果响应 403 Forbidden4、解决方案 1、先使用浏览器导入证书访问&#xff0c;测试证书和密钥是否正确 成功返回&#xff0c;说明p12证书和密钥是没问题的。 2、编写初始java代码 …

智慧公厕是公共厕所信息化向高端发展的必然

现代社会的发展离不开科技的加持&#xff0c;公共厕所作为城市基础设施之一&#xff0c;也在不断引入智慧化的概念&#xff0c;实现信息化、智慧化和数字化的使用和管理。智慧公厕通过物联网、大数据、云计算、网络通信和自动化控制技术的应用&#xff0c;成为了高级的社会公共…

【vue】watchEffect 自动侦听器

watchEffect&#xff1a;自动监听值的变化 获取旧值时&#xff0c;不是很方便&#xff0c;建议用watch <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

哪些被Asterisk 21版本暴砍的功能有多少是你常用的?我指的是chan_alsa

目录 江湖再无NoCDRapp_macro也不见了常用的还有哪些&#xff1f; Asterisk 21.0版本的发布&#xff0c;主打一个剪刀手。 正如社区官方傲慢、粗鲁&毫不遮掩的说法&#xff1a; Asterisk 21 saw fewer new additions than previous versions. Many of the changes are actu…

element table 使用了表格固定height高度和表格属性fixed属性出现了高度错乱bug

问题描述&#xff1a;因为使用了表格固定height高度所以 使用表格属性fixed属性出现了高度错乱bug知识点&#xff1a;使用element table 里提供的doLayout 方法 代码 // template <el-table ref"test" ></el-table>//js// 查询数据getList(obj{}) {get…

电焰灶十大品牌:华火电燃灶怎么样?

随着科技的发展和人们生活品质的提升&#xff0c;传统燃气灶具已无法满足现代家庭对于高效、环保、安全的需求。在这一背景下&#xff0c;电焰灶作为一种新型的厨房设备逐渐崭露头角。在众多电焰灶品牌中&#xff0c;华火电燃灶凭借其卓越的性能和创新的技术&#xff0c;成功跻…

【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算(针对多输入单输出回归预测模型)

【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算&#xff08;针对多输入单输出回归预测模型&#xff09; 因matlab的xgboost训练模型不含敏感性分析算法&#xff0c;本文通过使用single算法&#xff0c;即单特征因素对输出影响进行分析&#xff0c;得出不同…

NAPI 类对象导出及其生命周期管理(下)

4. 样例工程源码剖析 工程的模板是Native C,模型是Stage。源码剖析主要围绕以下几个文件 4.1. NAPI导出对象和生命周期管理具体实现 4.1.1. 定义NapiTest类及方法 Napi.h文件内容如下&#xff1a; #ifndef __NAPI_TEST_H__ #define __NAPI_TEST_H__#include "napi/nat…

集群监控原理

3.1.2.集群监控原理 Sentinel基于心跳机制监测服务状态&#xff0c;每隔1秒向集群的每个实例发送ping命令&#xff1a; •主观下线&#xff1a;如果某sentinel节点发现某实例未在规定时间响应&#xff0c;则认为该实例主观下线。 •客观下线&#xff1a;若超过指定数量&…

华为远程登陆管理配置:轻松掌握核心要点

实验拓扑及需求 实验步骤 A、配置相关地址及连通性测试 R1&#xff1a; [R1]int GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.12.1 24 R2&#xff1a; [R2]int gi 0/0/0 [R2-GigabitEthernet0/0/0]ip add 192.168.12.2 24 [R2]int gi 0/0/1 […

使用 Docker 部署 Linux-Command 命令搜索工具

1&#xff09;介绍 Linux-Command GitHub&#xff1a;https://github.com/jaywcjlove/linux-command Linux-Command 仓库搜集了 580 多个 Linux 命令&#xff0c;是一个非盈利性的仓库&#xff0c;生成了一个 Web 网站方便使用&#xff0c;目前网站没有任何广告&#xff0c;内…

阿里云4核16G服务器可以用来做什么?

阿里云4核16G服务器可以用来做什么&#xff1f;可用来搭建游戏服务器&#xff0c;阿里云4核16G服务器10M带宽30元1个月、90元3个月&#xff0c;优惠活动 aliyunfuwuqi.com/go/youhui 阿里云4核16G服务器可以用来做什么&#xff1f;除了搭建游戏服务器&#xff0c;还可以用来哪…

阿里云短信服务对接流程

阿里云短信服务是阿里巴巴集团推出的一款通讯服务产品&#xff0c;支持发送短信到手机、验证码短信、语音短信等多种短信场景。通过阿里云短信服务&#xff0c;企业可以方便、快捷、安全地将消息发送给用户&#xff0c;提升用户体验和品牌形象。此外&#xff0c;阿里云短信服务…

各种拟合算法整理

各种拟合算法整理 1. 最小二乘法2. 霍夫变换3. RANSAC算法 本篇将介绍最小二乘法(Least Square)、霍夫变换(Hough Transform)和RANSAC(random sample consensus&#xff0c;随机抽样一致性算法)算法的原理、应用和代码。 如果已经知道了一组可靠的点&#xff0c;可以直接使用最…