JAVA后台生成二维码并上传至OSS
JAVA后台生成二维码并上传至OSS
生成二维码的依赖
<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>
阿里云的依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
日期转换依赖
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
生成二维码
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;
}
}
OSSClientUtil阿里云上传图片简单工具类 仅供测试使用,如需要详细工具类可自行网上搜索或者查看阿里云官方文档
public class OSSClientUtil {
private static String endpoint = "";
private static String accessKeyId = "";
private static String accessKeySecret = "";
private static String bucketName = "";
private static String urlPrefix = "";
@Autowired
private static OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
/**
* 上传图片
*
* @param url
*/
public String uploadImg2Oss(MultipartFile url) throws Exception {
// 文件新路径
String fileName = url.getOriginalFilename();
String filePath = getFilePath(fileName);
// 上传到阿里云
try {
// 目录结构:images/2018/12/29/xxxx.jpg
ossClient.putObject(bucketName, filePath, new
ByteArrayInputStream(url.getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
//关流 ossClient.shutdown();
return urlPrefix + filePath;
}
将文件目录分层方便查看管理
private String getFilePath(String sourceFileName) {
DateTime dateTime = new DateTime();
return "images/" + dateTime.toString("yyyy")
+ "/" + dateTime.toString("MM") + "/"
+ dateTime.toString("dd") + "/" + System.currentTimeMillis() +
RandomUtils.nextInt(100, 9999) + "." +
StringUtils.substringAfterLast(sourceFileName, ".");
}
}
Service类
@Service
public class InspectionPointService {
public String updateHead(MultipartFile file)throws Exception {
if (file ==null || file.getSize() <=0) {
throw new Exception("file不能为空");
}
OSSClientUtil ossClient =new OSSClientUtil();
String name = ossClient.uploadImg2Oss(file);
return name;
}
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;
}
}
Controller
@RestController
@RequestMapping("/a")
public class QRController {
@Resource
private InspectionPointService inspectionPointService;
/**
* 打印二维码
* @param
* @return
*/
@GetMapping("PrintQRCode")
public String PrintQRCode(@RequestParam(value ="pointId")String pointId, HttpServletResponse response)throws Exception {
return inspectionPointService.PrintQRCode(pointId);
}
}
返回的就是二维码图片的OSS路径地址,扫一扫可获得相应的 pointId(此id一般是自己定义的推广码,可以参考短域名id算法,一般在后台自己生成作为用户全局唯一的推广码)。

浙公网安备 33010602011771号