java 二维码生成本地,上传oss
·
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version>
</dependency>
package com.shpl.scp.cms.service.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.shpl.scp.cms.api.feign.RemoteCmsFileService;
import com.shpl.scp.cms.api.feign.RemoteCmsSerialGenService;
import com.shpl.scp.cms.entity.CmsComplianceTrainingEntity;
import com.shpl.scp.cms.mapper.CmsComplianceTrainingMapper;
import com.shpl.scp.cms.service.CmsComplianceAttendanceService;
import com.shpl.scp.cms.service.CmsComplianceTrainingService;
import com.shpl.scp.cms.util.CustomMultipartFile;
import com.shpl.scp.common.core.util.R;
import com.shpl.scp.common.file.core.FileProperties;
import com.shpl.scp.common.file.core.FileTemplate;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
/**
* cms_合规培训
*
* @author geng
* @date 2025-12-24 10:12:30
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class CmsComplianceTrainingServiceImpl extends ServiceImpl<CmsComplianceTrainingMapper, CmsComplianceTrainingEntity> implements CmsComplianceTrainingService {
private final RemoteCmsSerialGenService remoteCmsSerialGenService;
private final RemoteCmsFileService remoteCmsFileService;
private final CmsComplianceAttendanceService cmsComplianceAttendanceService;
//注入 OssTemplate
private final FileTemplate fileTemplate;
private final FileProperties properties;
@Value("${file.tempPath}")
private String tmpPath;
@Override
public boolean saveTraining(CmsComplianceTrainingEntity cmsComplianceTraining) {
String serialNumber = remoteCmsSerialGenService.generate("cmsTrainingSerial");//3位
cmsComplianceTraining.setTrainingCode(serialNumber);
//1本地磁盘生成二维码
String fileType = "png";
//String fileName = IdUtil.simpleUUID() + StrUtil.DOT + fileType;
String fileName = serialNumber + StrUtil.DOT + fileType;
String filePathLocal = tmpPath +File.separator+ fileName;
try {
//String qrCodeUrlText = "https://www.baidu.com";
//构造企业微信网页授权链接
String qrCodeUrl = cmsComplianceAttendanceService.getQyWechatAuthorizeUrl(serialNumber);
log.info("生成企业微信二维码链接: {}", qrCodeUrl);
generateQRCodeImage(qrCodeUrl, 300, 300, filePathLocal); // 替换为你的文件路径
} catch (WriterException | IOException e) {
e.printStackTrace();
}
//2把本地磁盘二维码图片上传到OSS路径下
String uploadDir = "complianceTraining/";
File file = new File(filePathLocal);
MultipartFile multipartFile = new CustomMultipartFile(file);
/*//本地上传无文件表日志,不能下载try (InputStream inputStream = FileUtil.getInputStream(file)) {
fileTemplate.putObject(properties.getBucketName(), uploadDir, fileName, inputStream, fileType);
} catch (Exception e) {
log.error("上传失败", e);
}*/
remoteCmsFileService.innerUpload(multipartFile,uploadDir,fileName);
String qrCodeUrl = "/admin/sys-file/oss/file?fileName="+fileName+"&originalFileName="+fileName+"";
cmsComplianceTraining.setQrCodeUrl(qrCodeUrl);//签到二维码访问地址
this.save(cmsComplianceTraining);
return false;
}
public void generateQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置字符编码为UTF-8
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);
Path path = FileSystems.getDefault().getPath(filePath);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path); // 输出图片格式为PNG,也可以选择其他格式如JPG等
}
}
更多推荐

所有评论(0)