java springboot生成二维码图片
java生成二维码图片Maven依赖<!--生成二维码--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version></dependency><
·
java生成二维码图片
Maven依赖
<!--生成二维码-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.0</version>
</dependency>
Service 层方法实现
每一步注释写的很详细,很简单
@Service
public class ResumeSeedServiceImpl extends ServiceImpl<ResumeSeedMapper, ResumeSeed> implements IResumeSeedService {
@Autowired
private ResumeSeedMapper resumeSeedMapper;
private static String FileNameManual = "seed_images";
/**
* 请求 url 中的资源映射,不推荐写死在代码中,最好提供可配置,如 /upload_flowChart/**
*/
@Value("${uploadFile.resourceHandler}")
private String resourceHandler;
/**
* 上传文件保存的本地目录,使用@Value获取全局配置文件中配置的属性值,如 D:\resume\file/
*/
@Value("${uploadFile.location}")
private String uploadImagesLocation;
/**
* 根据userId生成二维码
* @param userId 用户id
* @return 返回二维码路径
*/
@Transactional
String qrCode(Long userId) {
String fileName = BatchNumberUtils.getFileNameByDate(FileNameManual);
//文件夹名
File pathFile = new File(uploadImagesLocation+File.separator+fileName+File.separator);
//图片名
String picName = userId+"_img.jpg";
//磁盘地址
String path = uploadImagesLocation+File.separator+fileName+File.separator+picName;
//数据库存储路径
String dataPath = resourceHandler.substring(0,resourceHandler.length()-2)+ fileName + "/" + picName;
//二维码内容
String content ="服务器地址/25";
/*
* 图片的宽度和高度
*/
int width = 300;
int height = 300;
// 图片的格式
String format = "png";
// 定义二维码的参数
HashMap<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
// 定义字符集编码格式
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
// 纠错的等级 L > M > Q > H 纠错的能力越高可存储的越少,一般使用M
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
// 设置图片边距
hints.put(EncodeHintType.MARGIN, 1);
try {
// 最终生成 参数列表 (1.内容 2.格式 3.宽度 4.高度 5.二维码参数)
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
if (!pathFile.exists()) {
pathFile.mkdirs();
}
// 写入到本地
Path file = new File(path).toPath();
MatrixToImageWriter.writeToPath(bitMatrix, format, file);
} catch (Exception e) {
new CustomException("二维码存储失败", 400);
}
return dataPath;
}
}
二维码内容
String content ="服务器地址/25";
扫描二维码会跳到这个地址 ,如果内容是"www.baidu.com",则会跳到百度
二维码内容不建议写死,可以在yml中配置
二维码保存位置
数据库存放的路径
通过浏览器访问图片
localhost:9207/img/seed_images/20201111/25_img.jpg
工具类生成带日期的文件夹
public class BatchNumberUtils {
private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
private static final AtomicInteger atomicInteger = new AtomicInteger(1000000);
/**
* 创建不连续的订单号
*
* @param no 数据中心编号
* @return 唯一的、不连续订单号
*/
public static synchronized String getOrderNoByUUID(String no) {
Integer uuidHashCode = UUID.randomUUID().toString().hashCode();
if (uuidHashCode < 0) {
uuidHashCode = uuidHashCode * (-1);
}
String date = simpleDateFormat.format(new Date());
return no + date + uuidHashCode;
}
/**
* 获取同一秒钟 生成的订单号连续
*
* @param no 数据中心编号
* @return 同一秒内订单连续的编号
*/
public static synchronized String getOrderNoByAtomic(String no) {
atomicInteger.getAndIncrement();
int i = atomicInteger.get();
String date = simpleDateFormat.format(new Date());
return no + date + i;
}
/**
* 获取当前日期组成的文件名
* @param name 文件名前缀
* @return 组成的文件名
*/
public static synchronized String getFileNameByDate(String name) {
String date = dateFormat.format(new Date());
return name +"/"+ date;
}
}
编写一个虚拟映射器
虚拟映射相当于一个中转站, 从数据库里拿到相对路径映射器给映射到磁盘上,从而达到图片的访问
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Value("${uploadFile.resourceHandler}")
private String resourceHandler;
@Value("${uploadFile.location}")
private String location;
/**
* 虚拟映射
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 就是说 url (http://localhost:8080/flow/upload_flowChart/xxxxxxx.jpg)
//中出现 resourceHandler 匹配时,则映射到 location 中去,location 相当于虚拟的,被映射的路径
// 映射本地文件时,开头必须是 file:/// 开头,表示协议
registry.addResourceHandler(resourceHandler).addResourceLocations("file:///" + location);
}
}
** Bootstrap.yml文件**
虚拟映射器设置图片保存路径
###上传文件配置 :该配置可根据部署的系统或开发人员自定义路径,每次部署之前需要修改location
uploadFile:
resourceHandler: /img/** #请求 url 中的资源映射也是保存到数据库中的父级路径
location: D:\\resume\\file\\ #自定义上传文件服务器硬盘保存路径 ,linux服务器保存路径 /opt/java/resume/images
二维码生成完如何使用呢?二维码嵌套在模板上
更多推荐
已为社区贡献1条内容
所有评论(0)