diff --git a/src/main/java/com/lovenav/service/serviceImpl/QRCServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/QRCServiceImpl.java index bbba53b..4d538df 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/QRCServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/QRCServiceImpl.java @@ -22,44 +22,80 @@ public class QRCServiceImpl implements QRCService{ private CollectIconListDao collectIconListDao; public String QR(CollectIconList collect) throws Exception { - String logoPath ="src/main/resources/static/logo/NAV.png"; + String logoPath = "src/main/resources/static/logo/NAV.png"; String destPath = "src/main/resources/static/qr"; -// 通过传入collect的url_id查找相同网址图片列表 -// List collectIconList = collectIconListDao.selectByUrlid(collect.getUrl_id()); // 通过collect的url_id查找网址id对应网址 UrlList urlList = urlListDao.selectByPrimaryKey(Long.valueOf(collect.getUrl_id())); - List list = collectIconListDao.selectByUrlid(collect.getUrl_id()); - if(list.size()==0){ - if(urlList != null && collect.getIcon_url()!=null){ -// 将icon下载到本地并存储本地路径 +// 如果表中没有可以插入 + if (list.size() == 0) { +// 如果icon是url + if(QRCodeUtil.isBase64(collect.getIcon_url())){ String icon_url = QRCodeUtil.downloadPicture(collect.getIcon_url()); collect.setIcon_url(icon_url); -// 获取网址url String url = urlList.getUrl(); -// 将网址生成二维码并返回本地路径 +// 将网址生成二维码并返回本地路径 String url_wait = QRCodeUtil.encode(url, logoPath, destPath, true); -// 为collect设置二维码本地路径 collect.setQr_url(url_wait); - collectIconListDao.insert(collect); String base64 = QRCodeUtil.ImageToBase64(url_wait); - return JSON.toJSONString(base64); - }else if(urlList != null && collect.getIcon_url()==null){ -// 获取网址url - String url = urlList.getUrl(); - String url_wait = QRCodeUtil.encode(url, logoPath, destPath, true); -// 为collect设置二维码本地路径 - collect.setQr_url(url_wait); collectIconListDao.insert(collect); - String base64 = QRCodeUtil.ImageToBase64(url_wait); return JSON.toJSONString(base64); } - }else{ - String url_wait = list.get(0).getQr_url(); - String base64 = QRCodeUtil.ImageToBase64(url_wait); - return JSON.toJSONString(base64); + else{ + String base64str = QRCodeUtil.delete_profix(collect.getIcon_url()); + String icon_url = QRCodeUtil.GenerateImage(base64str,"src/main/resources/static/icon"); + collect.setIcon_url(icon_url); + + String url = urlList.getUrl(); + String url_wait = QRCodeUtil.encode(url, logoPath, destPath, true); + collect.setQr_url(url_wait); + + String base64 = QRCodeUtil.ImageToBase64(url_wait); + collectIconListDao.insert(collect); + return JSON.toJSONString(base64); + } + } else { + return JSON.toJSONString("内容已存在"); } - return null; } + +//// 通过传入collect的url_id查找相同网址图片列表 +//// List collectIconList = collectIconListDao.selectByUrlid(collect.getUrl_id()); +// +//// 通过collect的url_id查找网址id对应网址 +// UrlList urlList = urlListDao.selectByPrimaryKey(Long.valueOf(collect.getUrl_id())); +// +// List list = collectIconListDao.selectByUrlid(collect.getUrl_id()); +// if(list.size()==0){ +// if(urlList != null && collect.getIcon_url()!=null){ +//// 将icon下载到本地并存储本地路径 +// String icon_url = QRCodeUtil.downloadPicture(collect.getIcon_url()); +// collect.setIcon_url(icon_url); +// +// +//// 为collect设置二维码本地路径 +// collect.setQr_url(url_wait); +// collectIconListDao.insert(collect); +// String base64 = QRCodeUtil.ImageToBase64(url_wait); +// return JSON.toJSONString(base64); +// }else if(urlList != null && collect.getIcon_url()==null){ +//// 获取网址url +// String url = urlList.getUrl(); +// String url_wait = QRCodeUtil.encode(url, logoPath, destPath, true); +//// 为collect设置二维码本地路径 +// collect.setQr_url(url_wait); +// collectIconListDao.insert(collect); +// String base64 = QRCodeUtil.ImageToBase64(url_wait); +// return JSON.toJSONString(base64); +// } +// }else{ +// String url_wait = list.get(0).getQr_url(); +// String base64 = QRCodeUtil.ImageToBase64(url_wait); +// return JSON.toJSONString(base64); +// } +// return null; +// } + + } diff --git a/src/main/java/com/lovenav/utils/QRCodeUtil.java b/src/main/java/com/lovenav/utils/QRCodeUtil.java index 944b46f..5344a52 100644 --- a/src/main/java/com/lovenav/utils/QRCodeUtil.java +++ b/src/main/java/com/lovenav/utils/QRCodeUtil.java @@ -20,6 +20,7 @@ import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.*; +import java.util.regex.Pattern; @Component @Service @@ -431,7 +432,56 @@ public class QRCodeUtil { return (serverPath +"/" + fileName); } + + + // 对字节数组字符串进行Base64解码并生成图片 + //imgFilePath 待保存的本地路径 + public static String GenerateImage(String base64Str, String imgFilePath) { + if (base64Str == null) // 图像数据为空 + return null; + Base64.Decoder decoder = Base64.getDecoder(); + try { + // Base64解码 + byte[] bytes = decoder.decode(base64Str); + for (int i = 0; i < bytes.length; ++i) { + if (bytes[i] < 0) {// 调整异常数据 + bytes[i] += 256; + } + } + + //设置图片名称,这个随意 + String date = new Random().nextInt(99999999)+".jpg"; + String fileName = date ; + + // 生成jpg图片 + OutputStream out = new FileOutputStream(imgFilePath +"/" + fileName); + out.write(bytes); + out.flush(); + out.close(); + return (imgFilePath +"/" + fileName); + } catch (Exception e) { + return null; + } + } + + public static boolean isBase64(String url){ + String reg = "[a-zA-z]+://[^\\s]*"; + boolean isMatch = Pattern.matches(reg, url); + if(isMatch){ + return isMatch; + } + return isMatch; + } + + public static String delete_profix(String base64){ + String delete = "data:image/jpg;base64,"; + String Base64 = base64; + return(base64.replace(delete,"")); + } + + public static void main(String[] args) throws Exception { + // String text = "https://www.baidu.com"; //这里设置自定义网站url // String logoPath ="src/main/resources/static/logo/NAV.png"; // String destPath = "src/main/resources/static/qr";