Java生成二维码并上传到阿里云OSS

在网上看到的文章。然后整理(精简)一下

原文地址:

  1. https://www.cnblogs.com/yangxiaoli/p/13530348.html

依赖:PS这里没有仔细看,没精简

<!--二维码-->
        <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>
        <!--阿里云oss上传文件-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.3</version>
        </dependency>
        <dependency>
            <groupId>aliyun-sdk-oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-vod</artifactId>
            <version>2.11.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-mock</artifactId>
            <version>2.0.8</version>
        </dependency>

OSSClientUtil(连接阿里云工具类)

/**
 * OSS上传工具类
 */

@Component
@Slf4j
public class OSSUtilsas {

    private static String accessKeyId = "阿里云AccessKey ID";
    private static String accessKeySecret = "阿里云Access Key Secret";
    private static String endpoint = "https://oss-cn-shenzhen.aliyuncs.com";
    private static String bucketName = "ossdesc"; //文件夹地址

    private static String picURL = "https://ossdesc.oss-cn-shenzhen.aliyuncs.com";


    public static OSSClient client;

    public static OSSClient initClient() {
        if (null == client) {
            ClientConfiguration conf = new ClientConfiguration();
            // 设置设置超时时间
            conf.setConnectionTimeout(5000);
            // 设置失败请求重试次数,默认3次
            conf.setMaxErrorRetry(10);
            client = (OSSClient) new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        }
        return client;
    }

    /**
     * 上传文件
     *
     * @param fileKey 对应文件名称
     * @param content 文件
     * @throws FileNotFoundException
     */
    public static boolean putObjectForInputStream(String fileKey, InputStream content) {
        log.info("开始上传图片:[{}]", fileKey);
        if (null == fileKey || "" == fileKey.trim())
            return false;
        try {
            initClient();
            ObjectMetadata meta = new ObjectMetadata();
            client.putObject(bucketName, fileKey, content, meta);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 上传图片
     *
     * @param imageName     文件名称 包括后缀名
     * @param content       需要上传的图片(文件流)
     * @param subfolderName 存储子文件夹名称(自己命名)
     * @return
     */
    public static String putObjectForImage(String imageName, InputStream content, String subfolderName) {
        if (null == imageName || "" == imageName.trim())
            return null;
        try {
            String file = "images/" + subfolderName + "/" + imageName;
            putObjectForInputStream(file, content);
            return picURL + "/" + file;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * @param file          需要上传的图片
     * @param subfolderName 存储子文件夹名称(自己命名)
     * @return
     * @throws Exception
     */
    public static String uploadImg(MultipartFile file, String subfolderName) throws Exception {
        String url = "";
        try {
            String originalFilename = file.getOriginalFilename();
            String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
            String name = StringUtils.replace(UUID.randomUUID().toString(), "-", "") + substring;
            InputStream inputStream = file.getInputStream();
            url = uploadFile(inputStream, name, subfolderName);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            client.shutdown();
        }
        System.out.println(url);
        return url;
    }

    /**
     * 上传到OSS服务器  如果同名文件会覆盖服务器上的
     *
     * @param instream      需要上传的图片(文件流)
     * @param fileName      文件名称 包括后缀名
     * @param subfolderName 存储子文件夹名称(自己命名)
     * @return
     */
    public static String uploadFile(InputStream instream, String fileName, String subfolderName) {
        String ret = "";
        try {
            //上传文件
            ret = putObjectForImage(fileName, instream, subfolderName);
        } finally {
            try {
                if (instream != null) {
                    instream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            client.shutdown();
        }
        return ret;
    }

}

二维码生成Util


@Configuration
@Slf4j
public class QRCodeGenerator {
    private final static String CHARSET = "utf-8";

    private final static int QRSIZEE = 300;

    // 二维码颜色
    private static final int BLACK = 0xFF000000;
    // 二维码颜色
    private static final int WHITE = 0xFFFFFFFF;

    public static BufferedImage createImage(String id) {
        String content = id;
        Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
        hints.put(EncodeHintType.MARGIN, 1);
        BitMatrix bitMatrix = null;
        try {
            bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRSIZEE, QRSIZEE, hints);
        } catch (Exception e) {
            e.printStackTrace();
        }
        int width = bitMatrix.getWidth();
        int height = bitMatrix.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, bitMatrix.get(x, y) ? BLACK : WHITE);
            }
        }
        return image;
    }

}

controller方法

@RequestMapping(value = "/print/QRCode", method = RequestMethod.GET)
@ApiOperation(value = "打印二维码 ")
@ApiImplicitParams({
        @ApiImplicitParam(name = "content", value = "需要打印的内容", required = true, paramType = "query", dataType = "string"),
})
public JsonResult PrintQRCode(String content) {
    return JsonResult.success(pointService.PrintQRCode(content));
}

service方法

public String PrintQRCode(String pointId) throws Exception {
    String[] pointIds = pointId.split(",");
    String urls = "";
    for (String id : pointIds) {
        BufferedImage image = QRCodeGenerator.createImage(id);
        // 创建输出流
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        // 将图像输出到输出流中。
        ImageIO.write(image, "jpeg", bos);
        MultipartFile multipartFile = new MockMultipartFile("test.jpeg", "test.jpeg", "", bos.toByteArray());
        if (urls.equals("")) {
            urls = updateHead(multipartFile);
        } else {
            urls = urls + "," + updateHead(multipartFile);
        }
    }
    return urls;
}

public String updateHead(MultipartFile file) throws Exception {
    if (file == null || file.getSize() <= 0) {
        throw new Exception("file不能为空");
    }
    return OSSUtils.uploadImg2Oss(file, "qrcode");
}

最后把 生成的路径存起来就好了

效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值