在网上看到的文章。然后整理(精简)一下
原文地址:
依赖: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");
}
最后把 生成的路径存起来就好了
效果图: