我是靠谱客的博主 真实皮带,最近开发中收集的这篇文章主要介绍二维码生成并上传至七牛云 返回图片URL,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景:最近一个项目的优惠券模块,需要将优惠券的券号转换成二维码展示出来,并保证能够被扫码枪识别。

接着,简要说明下编码思路,或者说步骤:

  • 引入 qrcode 的Jar依赖
  • 调用API,合理配置相关属性,生成二维码
  • 根据需要对第2步的图片进行一轮裁剪(可选)
  • 将图片以字节流的方式上传至七牛云
  • 拼接二维码的访问链接URL
     

手动导入依赖Jar:

  • Qrcode_A.jar
  • qrcode_B.jar

生成二维码

/**
* @Description 二维码工具类
* @Author blake
* @Date 2018/12/8 下午4:57
* @Version 1.0
*/
@Component
public class QrCodeUtils {
private static final Logger logger = LoggerFactory.getLogger(QrCodeUtils.class);
@Autowired
private QiniuUploadUtils qiniuUploadUtils;
/**
* @return java.lang.String
* @throws
* @description 二维码生成
* @params [qrData]
*/
public String generateQrCodeThenUpload(String qrData) throws IOException {
Qrcode x = new Qrcode();
int version = 7;
x.setQrcodeErrorCorrect('M');// 纠错等级
x.setQrcodeEncodeMode('B');// N代表数字,A代表a-Z,B代表其它(中文等)
x.setQrcodeVersion(version);// 版本号
// int width=300;
int width = 67 + 12 * (version - 1);
// int height=300;
int height = 67 + 12 * (version - 1);
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
Graphics2D gs = bufferedImage.createGraphics();
gs.setBackground(Color.WHITE);
gs.setColor(Color.BLACK);
gs.clearRect(0, 0, width, height);
int pixoff = 2;// 偏移量,如果不加有可能会导致识别不准确
// 如果有汉字需要加上编码
byte[] d = qrData.getBytes(StandardCharsets.UTF_8);
if (d.length > 0 && d.length < 120) {
boolean[][] s = x.calQrcode(d);
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < s.length; j++) {
if (s[j][i]) {
gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
}
}
}
}
gs.dispose();
bufferedImage.flush();
ByteArrayOutputStream os = new ByteArrayOutputStream();
// 生成二维码 => 图片写入字节输出流
ImageIO.write(bufferedImage, "jpg", os);
String domainAndKey = qiniuUploadUtils.uploadFilesViaServer(os);
logger.info("QrCodeUtils.generateQrCodeThenUpload ========= 域名+Key:{} ========= ", domainAndKey);
if (StringUtils.isNotBlank(domainAndKey)) {
String[] dKeyArray = domainAndKey.split(",");
return "http://" + dKeyArray[0] + "/" + dKeyArray[1];
} else {
logger.info("QrCodeUtils.generateQrCodeThenUpload ======== 二维码生成错误,请稍后重试!========");
throw new CommonBusinessException("二维码生成错误,请稍后重试!");
}
}
}

七牛云上传

/**
* @Description 七牛文件上传工具类
* @Author blake
* @Date 2018-12-19 17:40
* @Version 1.0
*/
@Component
public class QiniuUploadUtils {
@Value("${qiniu.cloud.access.Key}")
private String accessKey;
@Value("${qiniu.cloud.secret.Key}")
private String secretKey;
@Value("${qiniu.cloud.bucket}")
private String bucket;
@Value("${qiniu.cloud.domain}")
private String domain;
/**
* @return void
* @throws
* @description 七牛云通过服务端上传文件(使用数据流传输)
* @params [os]
*/
public String uploadFilesViaServer(ByteArrayOutputStream os) {
String retKey = "";
// 构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone2());
UploadManager uploadManager = new UploadManager(cfg);
String uuid = UUID.randomUUID().toString();
// 等同于文件名
String key = uuid.replace("-", "") + ".jpg";
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
// 接收字节输出流,然后转换为字节输入流
InputStream byteInputStream = new ByteArrayInputStream(os.toByteArray());
try {
Response response = uploadManager.put(byteInputStream, key, upToken, null, null);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
retKey = putRet.key;
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
return domain + "," + retKey;
}
}

 

最后

以上就是真实皮带为你收集整理的二维码生成并上传至七牛云 返回图片URL的全部内容,希望文章能够帮你解决二维码生成并上传至七牛云 返回图片URL所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部