SpringBoot生成二维码 扫描并可下载文件

生成二维码 扫描并可下载文件

  • pom.xml 依赖
  • application.yaml
  • Controller
  • ImageBuilderUtils 工具类

适当根据自己的业务需求变通,然后就能轻松使用了,不用再浪费大量时间去写二维码生成

pom.xml 依赖

        
        <dependency>
            <groupId>com.google.zxinggroupId>
            <artifactId>coreartifactId>
            <version>3.3.0version>
        dependency>
        <dependency>
            <groupId>com.google.zxinggroupId>
            <artifactId>javaseartifactId>
            <version>3.3.0version>
        dependency>

application.yaml

使用了若依 profile 文件路径映射 不是若依的,记得修改映射方式

SpringBoot生成二维码 扫描并可下载文件_第1张图片

Controller

   /**
    * 生成二维码
    * */
    @ApiOperation(value = "生成二维码", notes = "")
    @PostMapping(value = "/qrCode")
    public AjaxResult qrCode(){
        try {
        	//若依系统封装的Config  不是若依使用  getProfile() + "/upload"
            String filePath = RuoYiConfig.getUploadPath();
            //查询数据库获取最新的apk的信息     根据自己需要调用数据里的数据
            SysAppVersions newVersion = iSysAppVersionsService.getNewVersionId();
            if (newVersion.getId()==null)
                throw new CustomException("没有apk!");
            //设置二维码图片名称,如果没有DateTool工具类也可以直接使用时间戳 System.currentTimeMillis()
            String imgName = String.valueOf(newVersion.getId() + DateTool.currentTimestamp());
			//设置二维码存储路径
            String path = filePath + "/QRCode/" + imgName + ".png";
            //本地测试IP+APK存储路径
            String filename = "http://192.168.10.11:8086"+newVersion.getVersionsSite();
            //真实使用IP
//            String filename = "https://***"+newVersion.getVersionsSite();
            //保存二维码地址   profile若依系统映射文件路径方式 
            newVersion.setVersionsQrcode("/profile/upload/QRCode/" + imgName + ".png");
			//将生成的二维码地址存入数据库   根据自己需求判断是否需要存储地址    
			//iSysAppVersionsService.updateVersionsQRcodeById(newVersion.getId(),newVersion.getVersionsQrcode());
            img(filename, path);
            return AjaxResult.success("生成二维码成功!");
        }catch (Exception e){
            return AjaxResult.error(e.getMessage());
        }
    }
    
    private void img(String filename, String path) {
        try {
            //创建文件夹   如果没有工具类,则使用        
            //File file = new File(path);
	        //if (!file.exists()) {
	        //    file.mkdirs();
	        //}
            FileUploadUtils.addFolder(path);
            //生成二维码
            ImageBuilderUtils.generateQRCodeImage(filename, path);
        } catch (WriterException e) {
            throw new CustomException("WriterException 生成二维码失败,请稍后再试!");
        } catch (IOException e) {
            throw new CustomException("IOException 生成二维码失败,请稍后再试!");
        }
    }

ImageBuilderUtils 工具类

package com.ruoyi.project.tool.common;

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.google.zxing.qrcode.decoder.ErrorCorrectionLevel;


import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.Hashtable;

public class ImageBuilderUtils {


    /**
     * 生成二维码
     * @param filePath
     * @throws WriterException
     * @throws IOException
     */
    public static void generateQRCodeImage(String id, String filePath) throws WriterException, IOException {
        Hashtable hints = new Hashtable();
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        hints.put(EncodeHintType.MARGIN, 1);
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(id.toString(), BarcodeFormat.QR_CODE, 350, 350,hints);
        Path path = FileSystems.getDefault().getPath(filePath);
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);

    }


}

你可能感兴趣的:(springboot,java,springboot,spring)