From b30e17854902d5d49817a1b7262ed9663e843b47 Mon Sep 17 00:00:00 2001 From: qyhdd Date: Wed, 8 Jun 2022 17:46:10 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E4=B8=83=E7=89=9B=E4=BA=91=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=96=87=E4=BB=B6=EF=BC=8C=E5=9B=BE=E7=89=87=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bnyer-services/bnyer-file/pom.xml | 30 ++- .../file/controller/SysFileController.java | 7 +- .../com/bnyer/file/service/IQiniuService.java | 9 + .../file/service/impl/QiniuServiceImpl.java | 248 ++++++++++++++++++ .../java/com/bnyer/file/utils/StringUtil.java | 162 ++++++++++++ .../src/main/resources/bootstrap.yml | 9 + bnyer-services/bnyer-img/pom.xml | 6 + pom.xml | 8 +- 8 files changed, 465 insertions(+), 14 deletions(-) create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/StringUtil.java diff --git a/bnyer-services/bnyer-file/pom.xml b/bnyer-services/bnyer-file/pom.xml index a6296b8..98026f8 100644 --- a/bnyer-services/bnyer-file/pom.xml +++ b/bnyer-services/bnyer-file/pom.xml @@ -16,50 +16,50 @@ - + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery - + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config - + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel - + org.springframework.boot spring-boot-starter-actuator - + com.github.tobato fastdfs-client - + io.minio minio ${minio.version} - + com.dimensionalnode bnyer-api-system - + com.dimensionalnode @@ -78,7 +78,15 @@ springfox-swagger-ui ${swagger.fox.version} - + + com.qiniu + qiniu-java-sdk + + + com.squareup.okhttp3 + okhttp + 3.3.0 + @@ -97,5 +105,5 @@ - - \ No newline at end of file + + diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java index efaf070..592d2af 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java @@ -1,6 +1,7 @@ package com.bnyer.file.controller; import com.bnyer.common.core.domain.R; +import com.bnyer.file.service.IQiniuService; import com.bnyer.file.service.MinioService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -25,7 +26,8 @@ public class SysFileController { @Autowired private MinioService minioService; - + @Autowired + private IQiniuService qiniuService; /** * 批量上传图片 */ @@ -54,7 +56,8 @@ public class SysFileController public R upload(@RequestParam("file") MultipartFile file) { String url = null; try{ - url = minioService.uploadFile(file); + //url = minioService.uploadFile(file); + url=qiniuService.userUpload(file); }catch (Exception e){ log.error("文件上传失败,原因为:【{}】",e.getMessage()); return R.fail("文件上传失败!"); diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java new file mode 100644 index 0000000..e780e7a --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java @@ -0,0 +1,9 @@ +package com.bnyer.file.service; + +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; + +public interface IQiniuService { + String userUpload(MultipartFile file); +} diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java new file mode 100644 index 0000000..f525040 --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java @@ -0,0 +1,248 @@ +package com.bnyer.file.service.impl; + +import cn.hutool.core.net.multipart.UploadFile; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.common.codec.Base64; +import com.bnyer.common.core.domain.R; +import com.bnyer.file.service.IQiniuService; +import com.bnyer.file.utils.StringUtil; +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import com.qiniu.common.QiniuException; +import com.qiniu.common.Zone; +import com.qiniu.http.Client; +import com.qiniu.http.Response; +import com.qiniu.storage.Configuration; +import com.qiniu.storage.UploadManager; +import com.qiniu.storage.model.DefaultPutRet; +import com.qiniu.util.Auth; +import com.qiniu.util.StringMap; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; + +/** + * @Author: Yeman + * @Date: 2022-06-08-10:51 + * @Description: + */ +@Service("qiniuService") +public class QiniuServiceImpl implements IQiniuService { + @Value("${qiniu.accessKey}") + private static String accessKey; + + @Value("${qiniu.secretKey}") + private static String secretKey; + + @Value("${qiniu.bucketName}") + private static String bucketName; + + @Value("${qiniu.url}") + private static String url; + + private String token = null; + private UploadManager uploadManager; + private static Zone zone = new Zone.Builder(Zone.autoZone()) + .upHttp("http://upload.qiniup.com") + .upHttps("http://upload.qiniup.com") + .upBackupHttp("http://upload.qiniup.com") + .upBackupHttps("http://upload.qiniup.com") + .rsHttp("http://rs.qiniu.com") + .rsfHttp("http://rsf.qiniu.com") + .apiHttp("http://api.qiniu.com") + .iovipHttp("http://iovip.qbox.me").build(); + @Override + public String userUpload(MultipartFile file) { + String s = updloadFile(file); + return s; + } + public static String updloadFile(MultipartFile file){ + // 获取文件的名称 + String fileName = file.getOriginalFilename(); + //构造一个带指定 Region 对象的配置类 + Configuration cfg = new Configuration(zone); + cfg.useHttpsDomains=false; + UploadManager uploadManager = new UploadManager(cfg); + Auth auth = Auth.create(accessKey, secretKey); + String token = auth.uploadToken(bucketName); + // 使用工具类根据上传文件生成唯一图片名称 + String imgName = StringUtil.getRandomImgName(fileName); + if (!file.isEmpty()) { + FileInputStream inputStream =null; + try { + inputStream=(FileInputStream) file.getInputStream(); + Response response = uploadManager.put(inputStream, imgName, token,null,null); + DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); + url=url+"/"+putRet.key; + //System.out.println(putRet.hash); + inputStream.close(); + } catch (QiniuException ex) { + ex.printStackTrace(); + return "error"; + } catch (JsonSyntaxException e) { + e.printStackTrace(); + return "error"; + }catch (IOException ioe){ + ioe.printStackTrace(); + return "error"; + } + //String path = qiniuService.uploadFile(file) + // System.out.print("七牛云返回的图片链接:" + path); + return url; + } + return "error"; + } + + /** + * 检查图片内容是否符合规定 + * @param imageUrl 图片的url地址或者图片Base64编码(Base64编码请求时应在开头加上data:application/octet-stream;base64,) + * @return JSONObject + */ + public static JSONObject checkImageContent(String imageUrl) { + + //基础参数拼接 + String url = "http://ai.qiniuapi.com/v3/image/censor"; + String host = "ai.qiniuapi.com"; + String body = "{ \"data\": { \"uri\": \""+imageUrl+"\" }, \"params\": { \"scenes\": [ \"pulp\", \"terror\", \"politician\" ] } }"; + String contentType = "application/json"; + String method = "POST"; + String accessKey="p53_UbfvTkc_EsRZU-neo7FN6dK1TpEhH9xpHf1q"; + String secretKey="1W3byAEOKcsz7fKdE_ndCDJy6u_IGojH4A_fwuQx"; + Auth auth = Auth.create(accessKey, secretKey); + String qiniuToken = "Qiniu " + auth.signRequestV2(url, method, body.getBytes(), contentType); + //log.info("url={},body={},qiniuToken={}",url,body,qiniuToken); + //头部部分 + StringMap header = new StringMap(); + header.put("Host",host); + header.put("Authorization",qiniuToken); + header.put("Content-Type", contentType); + Configuration c = new Configuration(zone); + Client client = new Client(c); + try { + Response response = client.post(url, body.getBytes(), header, contentType); + //System.out.println(response.bodyString()); + //log.info("response result={}",response.bodyString()); + JSONObject checkResult = JSON.parseObject(response.bodyString()); + String checkMsg = JSON.parseObject(checkResult.get("result").toString()).get("suggestion").toString(); + if (checkMsg.equals("pass")){ + //可以通过 + } + if (checkMsg.equals("review")){ + //人工审核 + } + if (checkMsg.equals("block")){ + //不可通过 + } + return checkResult; + } catch (QiniuException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 检查图片的格式 + * @param multipartFiles + * @return 格式正确的文件 + */ + public static ArrayList checkImageFormat(ArrayList multipartFiles){ + ArrayList afterCheckFiles = new ArrayList<>(); + for (MultipartFile multipartFile : multipartFiles) { + ArrayList imageSuffixList = new ArrayList<>(); + String suffix = getSuffix(multipartFile); + //图片后缀 + imageSuffixList.add("jpg"); + imageSuffixList.add("png"); + imageSuffixList.add("avi"); + imageSuffixList.add("flv"); + imageSuffixList.add("mpg"); + imageSuffixList.add("mpeg"); + imageSuffixList.add("mpe"); + imageSuffixList.add("m1v"); + imageSuffixList.add("m2v"); + imageSuffixList.add("mpv2"); + imageSuffixList.add("mp2v"); + imageSuffixList.add("dat"); + imageSuffixList.add("ts"); + imageSuffixList.add("tp"); + imageSuffixList.add("tpr"); + imageSuffixList.add("pva"); + imageSuffixList.add("pss"); + imageSuffixList.add("mp4"); + imageSuffixList.add("m4v"); + imageSuffixList.add("m4p"); + imageSuffixList.add("m4b"); + imageSuffixList.add("3gp"); + imageSuffixList.add("3gpp"); + imageSuffixList.add("3g2"); + imageSuffixList.add("3gp2"); + imageSuffixList.add("ogg"); + imageSuffixList.add("mov"); + imageSuffixList.add("qt"); + imageSuffixList.add("amr"); + imageSuffixList.add("rm"); + imageSuffixList.add("ram"); + imageSuffixList.add("rmvb"); + imageSuffixList.add("rpm"); + //判断视频的后缀 MP4、MOV、WMV + ArrayList videoSuffixList = new ArrayList<>(); + videoSuffixList.add("mp4"); + videoSuffixList.add("mov"); + videoSuffixList.add("wmv"); +// imageSuffix.add("jpg"); +// imageSuffix.add("jpg"); + if (suffix != null&&imageSuffixList.contains(suffix)&&multipartFile.getSize() / 1024 < 50000&&multipartFile.getSize() / 1024 > 0) { + afterCheckFiles.add(multipartFile); + } + } + return afterCheckFiles; + } + + public static String getSuffix(MultipartFile file) { + String originalFilename = file.getOriginalFilename(); + //System.out.println(originalFilename); + int dot = originalFilename.lastIndexOf('.'); + int fileNameLength = originalFilename.length(); + if ((dot > -1) && (dot < (originalFilename.length()))) { + String suffix = originalFilename.substring(dot + 1, fileNameLength); + return suffix.toLowerCase(); + } + return null; + } + public static String getImageString(String imageFile){ + InputStream is = null; + try { + byte[] data = null; + is = new FileInputStream(new File(imageFile)); + data = new byte[is.available()]; + is.read(data); + return new String(Base64.encodeBase64(data)); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (null != is) { + try { + is.close(); + is = null; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return ""; + } + public static void main(String[] args) { + String imageString = getImageString("C:\\Users\\ASUS\\Documents\\WeChat Files\\wxid_vzk0z5ghy6q922\\FileStorage\\File\\2020-09\\20220608134731.png"); + JSONObject jsonObject = checkImageContent("data:application/octet-stream;base64," + imageString); + System.out.println(JSON.parseObject(jsonObject.get("result").toString()).get("suggestion").toString()); + System.out.println(jsonObject); + } +} diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/StringUtil.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/StringUtil.java new file mode 100644 index 0000000..2ffe9bb --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/StringUtil.java @@ -0,0 +1,162 @@ +package com.bnyer.file.utils; + +import cn.hutool.core.date.DateUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.Map; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @Author: Yeman + * @Date: 2022-06-08-11:08 + * @Description: + */ +@Slf4j +public class StringUtil { + /** + * 数值类型前面补零(共13位) + * @param num + * @return + */ + public static String supplementZeroGenerateThirteen(int num){ + String str = String.format("%013d", num); + + return str; + } + + /** + * 数值类型前面补零(共16位) + * @param num + * @return + */ + public static String supplementZeroGenerateSixteen(int num){ + String str = String.format("%016d", num); + + return str; + } + /** + * 数值类型前面补零(共3位) + * @param num + * @return + */ + public static String supplementZeroGenerateThree(int num){ + String str = String.format("%03d", num); + + return str; + } + + /** + * 判断字符串是不是double型 + * @param str + * @return + */ + public static boolean isNumeric(String str){ + Pattern pattern = Pattern.compile("[0-9]+[.]{0,1}[0-9]*[dD]{0,1}"); + Matcher isNum = pattern.matcher(str); + if( !isNum.matches() ){ + return false; + } + return true; + } + + public static String trim(String str, boolean nullFlag){ + String tempStr = null; + + if (str != null) + { + tempStr = str.trim(); + } + + if (nullFlag) + { + if ("".equals(tempStr) || "null".equals(tempStr)) + { + tempStr = null; + } + } + else + { + if (tempStr == null) + { + tempStr = ""; + } + } + + return tempStr; + } + public static String replace(String strSource, String strFrom, String strTo) { + if(strSource==null){ + return null; + } + int i = 0; + if ((i = strSource.indexOf(strFrom, i)) >= 0) { + char[] cSrc = strSource.toCharArray(); + char[] cTo = strTo.toCharArray(); + int len = strFrom.length(); + StringBuffer buf = new StringBuffer(cSrc.length); + buf.append(cSrc, 0, i).append(cTo); + i += len; + int j = i; + while ((i = strSource.indexOf(strFrom, i)) > 0) { + buf.append(cSrc, j, i - j).append(cTo); + i += len; + j = i; + } + buf.append(cSrc, j, cSrc.length - j); + return buf.toString(); + } + return strSource; + } + + + public static String deal(String str) { + str = replace(str, "\\", "\\\\"); + str = replace(str, "'", "\\'"); + str = replace(str, "\r", "\\r"); + str = replace(str, "\n", "\\n"); + str = replace(str, "\"", "\\\""); + return str; + } + + public static String GetMapToXML(Map param){ + StringBuffer sb = new StringBuffer(); + sb.append(""); + for (Map.Entry entry : param.entrySet()) { + sb.append("<"+ entry.getKey() +">"); + sb.append(entry.getValue()); + sb.append(""); + } + sb.append(""); + return sb.toString(); + } + + public static void main(String[] args){ + //String a = StringUtil.supplementZeroGenerateThirteen(1000); + double a = 32.; + System.out.println(StringUtil.isNumeric("32.")); + System.out.println(a); + } + + /** + * @Description: 生成唯一图片名称 + * @Param: fileName + * @return: 云服务器fileName + */ + public static String getRandomImgName(String fileName) { + + int index = fileName.lastIndexOf("."); + + if ((fileName == null || fileName.isEmpty()) || index == -1){ + throw new IllegalArgumentException(); + } + // 获取文件后缀 + String suffix = fileName.substring(index); + // 生成UUID + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + // 生成上传至云服务器的路径 + String path = "code/duck/" + DateUtil.today() + "-" + uuid + suffix; + return path; + } +} diff --git a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml index 1178a47..a1a9223 100644 --- a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml +++ b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml @@ -13,3 +13,12 @@ spring: profiles: # 环境配置 active: dev + servlet: + multipart: + maxFileSize: 5MB +qiniu: + accessKey: p53_UbfvTkc_EsRZU-neo7FN6dK1TpEhH9xpHf1q + secretKey: 1W3byAEOKcsz7fKdE_ndCDJy6u_IGojH4A_fwuQx + url: http://rd582ra2f.hd-bkt.clouddn.com/ + bucketName: cyjd + diff --git a/bnyer-services/bnyer-img/pom.xml b/bnyer-services/bnyer-img/pom.xml index 47d63c9..3aae3b2 100644 --- a/bnyer-services/bnyer-img/pom.xml +++ b/bnyer-services/bnyer-img/pom.xml @@ -95,6 +95,12 @@ xxl-job-core 2.1.2 + + + com.qiniu + qiniu-java-sdk + 7.2.18 + diff --git a/pom.xml b/pom.xml index e4e109a..080a6c6 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,7 @@ 2.12.2 1.18.12 5.8.0.M3 + 7.2.18 @@ -251,7 +252,12 @@ hutool-all ${hutool.version} - + + + com.qiniu + qiniu-java-sdk + ${qiniu.version} + From 5d907f28de2d3ee4c358c536bc99db1675ef9ddf Mon Sep 17 00:00:00 2001 From: qyhdd Date: Wed, 8 Jun 2022 21:09:37 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E6=8A=96=E9=9F=B3token=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/controller/SysFileController.java | 1 + .../com/bnyer/file/service/ITikTokImage.java | 12 +++ .../service/impl/TikTokImageServiceImpl.java | 68 ++++++++++++++++ .../java/com/bnyer/file/utils/HttpUtils.java | 77 +++++++++++++++++++ .../src/main/resources/bootstrap.yml | 4 + 5 files changed, 162 insertions(+) create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/ITikTokImage.java create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/HttpUtils.java diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java index 592d2af..9b3e389 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java @@ -84,4 +84,5 @@ public class SysFileController } return R.ok(url); } + } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/ITikTokImage.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/ITikTokImage.java new file mode 100644 index 0000000..57f4987 --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/ITikTokImage.java @@ -0,0 +1,12 @@ +package com.bnyer.file.service; + +import org.springframework.web.multipart.MultipartFile; + +/** + * @Author: qyh + * @Date: 2022-06-08-18:44 + * @Description: + */ +public interface ITikTokImage { + Boolean checkImageContent(MultipartFile file); +} diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java new file mode 100644 index 0000000..d44d4c7 --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java @@ -0,0 +1,68 @@ +package com.bnyer.file.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.common.codec.Base64; +import com.bnyer.file.service.IQiniuService; +import com.bnyer.file.service.ITikTokImage; +import com.bnyer.file.utils.HttpUtils; +import com.bnyer.file.utils.StringUtil; +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import com.qiniu.common.QiniuException; +import com.qiniu.common.Zone; +import com.qiniu.http.Client; +import com.qiniu.http.Response; +import com.qiniu.storage.Configuration; +import com.qiniu.storage.UploadManager; +import com.qiniu.storage.model.DefaultPutRet; +import com.qiniu.util.Auth; +import com.qiniu.util.StringMap; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @Author: Yeman + * @Date: 2022-06-08-10:51 + * @Description: + */ +@Service("tiktokImage") +public class TikTokImageServiceImpl implements ITikTokImage { + @Value("${tiktok.appId}") + private static String appId; + + @Value("${tiktok.secret}") + private static String secret; + + @Value("${tiktok.grant_type}") + private static String grant_type; + + @Value("${qiniu.url}") + private String getTokenUrl="https://developer.toutiao.com/api/apps/v2/token"; + public static void main(String[] args) { + } + + @Override + public Boolean checkImageContent(MultipartFile file) { + String token=""; + HashMap param = new HashMap<>(); + param.put("appId", appId); + param.put("secret", secret); + param.put("grant_type", grant_type); + String body = JSON.toJSONString(param); + String res = HttpUtils.sendPost(getTokenUrl, body); + String err_tips = JSON.parseObject(res).get("err_tips").toString(); + if (err_tips.equals("success")){ + token=JSON.parseObject(err_tips).get("access_token").toString(); + } + return null; + } +} diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/HttpUtils.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/HttpUtils.java new file mode 100644 index 0000000..b807877 --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/HttpUtils.java @@ -0,0 +1,77 @@ +package com.bnyer.file.utils; + +import lombok.extern.slf4j.Slf4j; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.URL; +import java.net.URLConnection; + +/** + * @Author: qyh + * @Date: 2022-06-08-18:52 + * @Description: + */ +@Slf4j +public class HttpUtils { + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) { + PrintWriter out = null; + BufferedReader in = null; + String result = ""; + try { + URL realUrl = new URL(url); + + log.info("post"+url+param); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("content-type", "application/json"); + // 发送POST请求必须设置如下两行 + + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setConnectTimeout(5000); + conn.setReadTimeout(5000); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + // 发送请求参数 + out.print(param); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + in = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + log.info("发送 POST 请求出现异常!" + e); + e.printStackTrace(); + } + //使用finally块来关闭输出流、输入流 + finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + log.info(result); + return result; + } +} diff --git a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml index a1a9223..0fb93ff 100644 --- a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml +++ b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml @@ -22,3 +22,7 @@ qiniu: url: http://rd582ra2f.hd-bkt.clouddn.com/ bucketName: cyjd +tiktok: + appId: ttc408b2b55b364f6601 + secret: 58ac3ac54e7f9899cdc61a09d7f0a018b5049fd4 + grant_type: client_credential From d99cb5b6d9560047ae377435cd23fc6d8806fafb Mon Sep 17 00:00:00 2001 From: penny <2500338766@qq.com> Date: Wed, 8 Jun 2022 22:21:26 +0800 Subject: [PATCH 3/8] =?UTF-8?q?feature1.0.0-Img=EF=BC=9A=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=B8=83=E7=89=9B=E4=BA=91=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bnyer/file/config/QiniuConfig.java | 32 +++++++++++ .../file/service/impl/QiniuServiceImpl.java | 57 ++++++++----------- .../src/main/resources/bootstrap.yml | 10 ---- 3 files changed, 56 insertions(+), 43 deletions(-) create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/QiniuConfig.java diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/QiniuConfig.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/QiniuConfig.java new file mode 100644 index 0000000..f7104fa --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/QiniuConfig.java @@ -0,0 +1,32 @@ +package com.bnyer.file.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +@Configuration +@RefreshScope +@Getter +@Setter +public class QiniuConfig { + + @Value("${qiniu.accessKey}") + private String accessKey; + + @Value("${qiniu.secretKey}") + private String secretKey; + + @Value("${qiniu.bucketName}") + private String bucketName; + + @Value("${qiniu.url}") + private String url; + + @Value("${qiniu.qiniuHostUrl}") + private String qiniuHostUrl; + + @Value("${qiniu.qiniuCheckImgUrl}") + private String qiniuCheckImgUrl; +} diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java index f525040..0451bab 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java @@ -1,10 +1,9 @@ package com.bnyer.file.service.impl; -import cn.hutool.core.net.multipart.UploadFile; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.codec.Base64; -import com.bnyer.common.core.domain.R; +import com.bnyer.file.config.QiniuConfig; import com.bnyer.file.service.IQiniuService; import com.bnyer.file.utils.StringUtil; import com.google.gson.Gson; @@ -18,7 +17,7 @@ import com.qiniu.storage.UploadManager; import com.qiniu.storage.model.DefaultPutRet; import com.qiniu.util.Auth; import com.qiniu.util.StringMap; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -33,23 +32,15 @@ import java.util.ArrayList; * @Date: 2022-06-08-10:51 * @Description: */ -@Service("qiniuService") +@Service public class QiniuServiceImpl implements IQiniuService { - @Value("${qiniu.accessKey}") - private static String accessKey; - @Value("${qiniu.secretKey}") - private static String secretKey; - - @Value("${qiniu.bucketName}") - private static String bucketName; - - @Value("${qiniu.url}") - private static String url; + @Autowired + private QiniuConfig qiniuConfig; private String token = null; private UploadManager uploadManager; - private static Zone zone = new Zone.Builder(Zone.autoZone()) + private Zone zone = new Zone.Builder(Zone.autoZone()) .upHttp("http://upload.qiniup.com") .upHttps("http://upload.qiniup.com") .upBackupHttp("http://upload.qiniup.com") @@ -60,18 +51,18 @@ public class QiniuServiceImpl implements IQiniuService { .iovipHttp("http://iovip.qbox.me").build(); @Override public String userUpload(MultipartFile file) { - String s = updloadFile(file); - return s; + return this.updloadFile(file); } - public static String updloadFile(MultipartFile file){ + public String updloadFile(MultipartFile file){ + String url = null; // 获取文件的名称 String fileName = file.getOriginalFilename(); //构造一个带指定 Region 对象的配置类 Configuration cfg = new Configuration(zone); cfg.useHttpsDomains=false; UploadManager uploadManager = new UploadManager(cfg); - Auth auth = Auth.create(accessKey, secretKey); - String token = auth.uploadToken(bucketName); + Auth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey()); + String token = auth.uploadToken(qiniuConfig.getBucketName()); // 使用工具类根据上传文件生成唯一图片名称 String imgName = StringUtil.getRandomImgName(fileName); if (!file.isEmpty()) { @@ -80,7 +71,7 @@ public class QiniuServiceImpl implements IQiniuService { inputStream=(FileInputStream) file.getInputStream(); Response response = uploadManager.put(inputStream, imgName, token,null,null); DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); - url=url+"/"+putRet.key; + url=qiniuConfig.getUrl()+"/"+putRet.key; //System.out.println(putRet.hash); inputStream.close(); } catch (QiniuException ex) { @@ -105,16 +96,15 @@ public class QiniuServiceImpl implements IQiniuService { * @param imageUrl 图片的url地址或者图片Base64编码(Base64编码请求时应在开头加上data:application/octet-stream;base64,) * @return JSONObject */ - public static JSONObject checkImageContent(String imageUrl) { - + public JSONObject checkImageContent(String imageUrl) { //基础参数拼接 - String url = "http://ai.qiniuapi.com/v3/image/censor"; - String host = "ai.qiniuapi.com"; + String url = qiniuConfig.getQiniuCheckImgUrl(); + String host = qiniuConfig.getQiniuHostUrl(); String body = "{ \"data\": { \"uri\": \""+imageUrl+"\" }, \"params\": { \"scenes\": [ \"pulp\", \"terror\", \"politician\" ] } }"; String contentType = "application/json"; String method = "POST"; - String accessKey="p53_UbfvTkc_EsRZU-neo7FN6dK1TpEhH9xpHf1q"; - String secretKey="1W3byAEOKcsz7fKdE_ndCDJy6u_IGojH4A_fwuQx"; + String accessKey= qiniuConfig.getAccessKey(); + String secretKey= qiniuConfig.getSecretKey(); Auth auth = Auth.create(accessKey, secretKey); String qiniuToken = "Qiniu " + auth.signRequestV2(url, method, body.getBytes(), contentType); //log.info("url={},body={},qiniuToken={}",url,body,qiniuToken); @@ -239,10 +229,11 @@ public class QiniuServiceImpl implements IQiniuService { } return ""; } - public static void main(String[] args) { - String imageString = getImageString("C:\\Users\\ASUS\\Documents\\WeChat Files\\wxid_vzk0z5ghy6q922\\FileStorage\\File\\2020-09\\20220608134731.png"); - JSONObject jsonObject = checkImageContent("data:application/octet-stream;base64," + imageString); - System.out.println(JSON.parseObject(jsonObject.get("result").toString()).get("suggestion").toString()); - System.out.println(jsonObject); - } +// public static void main(String[] args) { +// +// String imageString = getImageString("C:\\Users\\ASUS\\Documents\\WeChat Files\\wxid_vzk0z5ghy6q922\\FileStorage\\File\\2020-09\\20220608134731.png"); +// JSONObject jsonObject = checkImageContent("data:application/octet-stream;base64," + imageString); +// System.out.println(JSON.parseObject(jsonObject.get("result").toString()).get("suggestion").toString()); +// System.out.println(jsonObject); +// } } diff --git a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml index 0fb93ff..ccea5fc 100644 --- a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml +++ b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml @@ -16,13 +16,3 @@ spring: servlet: multipart: maxFileSize: 5MB -qiniu: - accessKey: p53_UbfvTkc_EsRZU-neo7FN6dK1TpEhH9xpHf1q - secretKey: 1W3byAEOKcsz7fKdE_ndCDJy6u_IGojH4A_fwuQx - url: http://rd582ra2f.hd-bkt.clouddn.com/ - bucketName: cyjd - -tiktok: - appId: ttc408b2b55b364f6601 - secret: 58ac3ac54e7f9899cdc61a09d7f0a018b5049fd4 - grant_type: client_credential From df5a2c9553024ff292754ae385cc9b710a9771a8 Mon Sep 17 00:00:00 2001 From: qyhdd Date: Mon, 4 Jul 2022 09:53:20 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=EF=BC=8C=E5=AE=A1=E6=A0=B8=EF=BC=8C=E5=8E=8B=E7=BC=A9=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bnyer-services/bnyer-file/pom.xml | 7 + .../com/bnyer/file/config/TikTokConfig.java | 27 ++++ .../file/controller/SysFileController.java | 83 ++++++++--- .../com/bnyer/file/service/IFileService.java | 15 ++ .../com/bnyer/file/service/IQiniuService.java | 11 ++ .../com/bnyer/file/service/ITikTokImage.java | 1 + .../file/service/impl/FileServiceImpl.java | 71 ++++++++++ .../file/service/impl/QiniuServiceImpl.java | 37 ++--- .../service/impl/TikTokImageServiceImpl.java | 47 ++++-- .../java/com/bnyer/file/utils/HttpUtils.java | 4 +- .../java/com/bnyer/file/utils/ImgUtil.java | 134 ++++++++++++++++++ .../java/com/bnyer/file/vo/TiktokImgVo.java | 45 ++++++ .../src/main/resources/bootstrap.yml | 2 +- 13 files changed, 421 insertions(+), 63 deletions(-) create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/TiktokImgVo.java diff --git a/bnyer-services/bnyer-file/pom.xml b/bnyer-services/bnyer-file/pom.xml index 98026f8..4ee76a5 100644 --- a/bnyer-services/bnyer-file/pom.xml +++ b/bnyer-services/bnyer-file/pom.xml @@ -87,6 +87,13 @@ okhttp 3.3.0 + + + org.springframework + spring-mock + 2.0.8 + + diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java new file mode 100644 index 0000000..03dfb26 --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java @@ -0,0 +1,27 @@ +package com.bnyer.file.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +/** + * @Author: qyh + * @Date: 2022-06-12-16:24 + * @Description: + */ +@Configuration +@RefreshScope +@Getter +@Setter +public class TikTokConfig { + @Value("${tiktok.appId}") + private String appId; + + @Value("${tiktok.secret}") + private String secret; + + @Value("${tiktok.grant_type}") + private String grant_type; +} diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java index 9b3e389..1b31dec 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java @@ -1,8 +1,13 @@ package com.bnyer.file.controller; +import com.alibaba.fastjson.JSONObject; import com.bnyer.common.core.domain.R; +import com.bnyer.file.service.IFileService; import com.bnyer.file.service.IQiniuService; +import com.bnyer.file.service.ITikTokImage; import com.bnyer.file.service.MinioService; +import com.bnyer.file.utils.ImgUtil; +import com.bnyer.file.vo.TiktokImgVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; @@ -12,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -22,30 +28,65 @@ import java.util.List; */ @RestController @Slf4j -public class SysFileController -{ +public class SysFileController { @Autowired private MinioService minioService; @Autowired private IQiniuService qiniuService; + @Autowired + private ITikTokImage tikTokImage; + @Autowired + private IFileService fileService; + /** * 批量上传图片 */ @PostMapping("/uploadBatch") - public R> uploadBatch(MultipartFile[] files) - { - try - { + public R> uploadBatch(MultipartFile[] files) { + try { List list = new ArrayList<>(); for (MultipartFile file : files) { - String url = minioService.uploadFile(file); + String url = qiniuService.userUpload(file); list.add(url); } // 上传并返回访问地址 return R.ok(list); + } catch (Exception e) { + log.error("上传文件失败", e); + return R.fail("上传文件失败"); } - catch (Exception e) - { + } + + /** + * 批量上传压缩图片 + * @param files + * @return + * @throws IOException + */ + @PostMapping("/uploadBatchCompImg") + public R> compression(MultipartFile[] files) throws IOException { + List list = new ArrayList<>(); + for (MultipartFile file : files) { + MultipartFile file1 = ImgUtil.commpressPicCycle(100, 0.5f, file); + System.out.println("sssss"); + String url = qiniuService.userUpload(file1); + list.add(url); + } + + // 上传并返回访问地址 + return R.ok(list); + } + + /** + * 批量审核 + */ + @PostMapping("/checkBatch") + public R> checkBatch(ArrayList files) { + try { + ArrayList list = fileService.checkImg(files); + // 上传并返回访问地址 + return R.ok(list); + } catch (Exception e) { log.error("上传文件失败", e); return R.fail("上传文件失败"); } @@ -55,11 +96,17 @@ public class SysFileController @ResponseBody public R upload(@RequestParam("file") MultipartFile file) { String url = null; - try{ - //url = minioService.uploadFile(file); - url=qiniuService.userUpload(file); - }catch (Exception e){ - log.error("文件上传失败,原因为:【{}】",e.getMessage()); + try { + //url = minioService.uploadFile(file); + // url=qiniuService.userUpload(file); + String imageString = ImgUtil.getImageString(file); + //System.out.println(imageString); + //JSONObject jsonObject = qiniuService.checkImageContent("data:application/octet-stream;base64," + imageString); + System.out.println("================================="); + //System.out.println(jsonObject); + tikTokImage.checkImageContent(file); + } catch (Exception e) { + log.error("文件上传失败,原因为:【{}】", e.getMessage()); return R.fail("文件上传失败!"); } return R.ok(url); @@ -68,7 +115,7 @@ public class SysFileController @PostMapping("/download") @ResponseBody public R download(@RequestParam("fileName") String fileName, HttpServletResponse response) { - minioService.download(fileName,response); + minioService.download(fileName, response); return R.ok(); } @@ -76,10 +123,10 @@ public class SysFileController @ResponseBody public R uploadBanner(@RequestParam("file") MultipartFile file) { String url = null; - try{ + try { url = minioService.uploadBanner(file); - }catch (Exception e){ - log.error("文件上传失败,原因为:【{}】",e.getMessage()); + } catch (Exception e) { + log.error("文件上传失败,原因为:【{}】", e.getMessage()); return R.fail("banner上传失败!"); } return R.ok(url); diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java new file mode 100644 index 0000000..910d45e --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java @@ -0,0 +1,15 @@ +package com.bnyer.file.service; + +import com.bnyer.file.vo.TiktokImgVo; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; + +/** + * @Author: qyh + * @Date: 2022-06-16-11:03 + * @Description: + */ +public interface IFileService { + ArrayList checkImg(ArrayList multipartFiles); +} diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java index e780e7a..c023d30 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java @@ -1,9 +1,20 @@ package com.bnyer.file.service; +import com.alibaba.fastjson.JSONObject; import org.springframework.web.multipart.MultipartFile; import java.io.File; +import java.util.ArrayList; public interface IQiniuService { String userUpload(MultipartFile file); + + String checkImageContent(String imageUrl); + + /** + * 检查图片格式 + * @param multipartFiles + * @return + */ + ArrayList checkImageFormat(ArrayList multipartFiles); } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/ITikTokImage.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/ITikTokImage.java index 57f4987..5a2ea43 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/ITikTokImage.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/ITikTokImage.java @@ -8,5 +8,6 @@ import org.springframework.web.multipart.MultipartFile; * @Description: */ public interface ITikTokImage { + //抖音图片审核 Boolean checkImageContent(MultipartFile file); } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java new file mode 100644 index 0000000..8c06a31 --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java @@ -0,0 +1,71 @@ +package com.bnyer.file.service.impl; + +import cn.hutool.core.img.Img; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bnyer.file.config.TikTokConfig; +import com.bnyer.file.service.IFileService; +import com.bnyer.file.service.IQiniuService; +import com.bnyer.file.service.ITikTokImage; +import com.bnyer.file.utils.HttpUtils; +import com.bnyer.file.utils.ImgUtil; +import com.bnyer.file.vo.TiktokImgVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @Author: Yeman + * @Date: 2022-06-08-10:51 + * @Description: + */ +@Service("file") +public class FileServiceImpl implements IFileService { + @Autowired + private IQiniuService qiniuService; + @Autowired + private ITikTokImage tikTokImage; + @Override + public ArrayList checkImg(ArrayList multipartFiles) { + ArrayList tiktokImgVos = new ArrayList<>(); + //返回通过校验的数组 + ArrayList multipartFileList = qiniuService.checkImageFormat(multipartFiles); + for (MultipartFile multipartFile : multipartFileList) { + TiktokImgVo tiktokImgVo = new TiktokImgVo(); + String filename = multipartFile.getResource().getFilename(); + tiktokImgVo.setFileName(filename); + String imageString = ImgUtil.getImageString(multipartFile); + String checkMsg = qiniuService.checkImageContent("data:application/octet-stream;base64," +imageString); + if (checkMsg.equals("pass")){ + //抖音图片检测二次检测 + if (tikTokImage.checkImageContent(multipartFile)) { + //可以通过 + tiktokImgVo.setStatus("1"); + tiktokImgVos.add(tiktokImgVo); + }else { + //不可以通过 + tiktokImgVo.setStatus("2"); + tiktokImgVos.add(tiktokImgVo); + } + continue; + } + if (checkMsg.equals("review")){ + //人工审核 + tiktokImgVo.setStatus("0"); + tiktokImgVos.add(tiktokImgVo); + continue; + } + if (checkMsg.equals("block")){ + //不可通过 + tiktokImgVo.setStatus("2"); + tiktokImgVos.add(tiktokImgVo); + continue; + } + } + return tiktokImgVos; + } +} diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java index 0451bab..75a1e16 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.codec.Base64; import com.bnyer.file.config.QiniuConfig; import com.bnyer.file.service.IQiniuService; +import com.bnyer.file.utils.ImgUtil; import com.bnyer.file.utils.StringUtil; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; @@ -66,9 +67,9 @@ public class QiniuServiceImpl implements IQiniuService { // 使用工具类根据上传文件生成唯一图片名称 String imgName = StringUtil.getRandomImgName(fileName); if (!file.isEmpty()) { - FileInputStream inputStream =null; + InputStream inputStream =null; try { - inputStream=(FileInputStream) file.getInputStream(); + inputStream=(InputStream) file.getInputStream(); Response response = uploadManager.put(inputStream, imgName, token,null,null); DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); url=qiniuConfig.getUrl()+"/"+putRet.key; @@ -96,7 +97,8 @@ public class QiniuServiceImpl implements IQiniuService { * @param imageUrl 图片的url地址或者图片Base64编码(Base64编码请求时应在开头加上data:application/octet-stream;base64,) * @return JSONObject */ - public JSONObject checkImageContent(String imageUrl) { + @Override + public String checkImageContent(String imageUrl) { //基础参数拼接 String url = qiniuConfig.getQiniuCheckImgUrl(); String host = qiniuConfig.getQiniuHostUrl(); @@ -130,7 +132,7 @@ public class QiniuServiceImpl implements IQiniuService { if (checkMsg.equals("block")){ //不可通过 } - return checkResult; + return checkMsg; } catch (QiniuException e) { e.printStackTrace(); } @@ -143,7 +145,7 @@ public class QiniuServiceImpl implements IQiniuService { * @param multipartFiles * @return 格式正确的文件 */ - public static ArrayList checkImageFormat(ArrayList multipartFiles){ + public ArrayList checkImageFormat(ArrayList multipartFiles){ ArrayList afterCheckFiles = new ArrayList<>(); for (MultipartFile multipartFile : multipartFiles) { ArrayList imageSuffixList = new ArrayList<>(); @@ -207,31 +209,10 @@ public class QiniuServiceImpl implements IQiniuService { } return null; } - public static String getImageString(String imageFile){ - InputStream is = null; - try { - byte[] data = null; - is = new FileInputStream(new File(imageFile)); - data = new byte[is.available()]; - is.read(data); - return new String(Base64.encodeBase64(data)); - } catch (Exception e) { - e.printStackTrace(); - } finally { - if (null != is) { - try { - is.close(); - is = null; - } catch (Exception e) { - e.printStackTrace(); - } - } - } - return ""; - } + // public static void main(String[] args) { // -// String imageString = getImageString("C:\\Users\\ASUS\\Documents\\WeChat Files\\wxid_vzk0z5ghy6q922\\FileStorage\\File\\2020-09\\20220608134731.png"); +// String imageString = ImgUtil.getImageString("C:\\Users\\ASUS\\Documents\\WeChat Files\\wxid_vzk0z5ghy6q922\\FileStorage\\File\\2020-09\\20220608134731.png"); // JSONObject jsonObject = checkImageContent("data:application/octet-stream;base64," + imageString); // System.out.println(JSON.parseObject(jsonObject.get("result").toString()).get("suggestion").toString()); // System.out.println(jsonObject); diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java index d44d4c7..e3a12ee 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java @@ -1,11 +1,14 @@ package com.bnyer.file.service.impl; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.codec.Base64; +import com.bnyer.file.config.TikTokConfig; import com.bnyer.file.service.IQiniuService; import com.bnyer.file.service.ITikTokImage; import com.bnyer.file.utils.HttpUtils; +import com.bnyer.file.utils.ImgUtil; import com.bnyer.file.utils.StringUtil; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; @@ -18,6 +21,7 @@ import com.qiniu.storage.UploadManager; import com.qiniu.storage.model.DefaultPutRet; import com.qiniu.util.Auth; import com.qiniu.util.StringMap; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -36,17 +40,12 @@ import java.util.HashMap; */ @Service("tiktokImage") public class TikTokImageServiceImpl implements ITikTokImage { - @Value("${tiktok.appId}") - private static String appId; + @Autowired + private TikTokConfig tikTokConfig; - @Value("${tiktok.secret}") - private static String secret; - - @Value("${tiktok.grant_type}") - private static String grant_type; - - @Value("${qiniu.url}") private String getTokenUrl="https://developer.toutiao.com/api/apps/v2/token"; + + private String checkImgUrl="https://developer.toutiao.com/api/apps/censor/image"; public static void main(String[] args) { } @@ -54,15 +53,35 @@ public class TikTokImageServiceImpl implements ITikTokImage { public Boolean checkImageContent(MultipartFile file) { String token=""; HashMap param = new HashMap<>(); - param.put("appId", appId); - param.put("secret", secret); - param.put("grant_type", grant_type); + param.put("appId", tikTokConfig.getAppId()); + param.put("secret", tikTokConfig.getSecret()); + param.put("grant_type", tikTokConfig.getGrant_type()); String body = JSON.toJSONString(param); String res = HttpUtils.sendPost(getTokenUrl, body); String err_tips = JSON.parseObject(res).get("err_tips").toString(); if (err_tips.equals("success")){ - token=JSON.parseObject(err_tips).get("access_token").toString(); + res=JSON.parseObject(res).get("data").toString(); + token=JSON.parseObject(res).get("access_token").toString(); + } + if (token!=""){ + HashMap checkParam = new HashMap<>(); + checkParam.put("app_id", tikTokConfig.getAppId()); + checkParam.put("access_token", token); + checkParam.put("image_data", ImgUtil.getImageString(file)); + String checkBody = JSON.toJSONString(checkParam); + String checkRes = HttpUtils.sendPost(checkImgUrl, checkBody); + JSONObject jsonObject = JSON.parseObject(checkRes); + JSONArray predicts = JSON.parseArray(jsonObject.get("predicts").toString()); + for (Object predict : predicts) { + String hit = JSON.parseObject(predict.toString()).get("hit").toString(); + if (hit.equals("true")) { + //System.out.println("不通过=========================="); + return false; + } + //System.out.println(predict+"==================="); + } + return true; } - return null; + return false; } } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/HttpUtils.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/HttpUtils.java index b807877..5aaa297 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/HttpUtils.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/HttpUtils.java @@ -39,8 +39,8 @@ public class HttpUtils { conn.setDoOutput(true); conn.setDoInput(true); - conn.setConnectTimeout(5000); - conn.setReadTimeout(5000); + conn.setConnectTimeout(15000); + conn.setReadTimeout(15000); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/ImgUtil.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/ImgUtil.java index a013890..17e9050 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/ImgUtil.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/utils/ImgUtil.java @@ -1,17 +1,22 @@ package com.bnyer.file.utils; +import com.alibaba.nacos.common.codec.Base64; import lombok.extern.slf4j.Slf4j; +import net.coobird.thumbnailator.Thumbnails; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.http.MediaType; +import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartFile; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; +import java.math.BigDecimal; /** * 图片处理工具类 @@ -130,4 +135,133 @@ public class ImgUtil { } return flag; } + + /** + * 将图片转为base64字符串 + * @param imageFile + * @return + */ + public static String getImageString(String imageFile){ + InputStream is = null; + try { + byte[] data = null; + is = new FileInputStream(new File(imageFile)); + data = new byte[is.available()]; + is.read(data); + return new String(Base64.encodeBase64(data)); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (null != is) { + try { + is.close(); + is = null; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return ""; + } + + /** + * 将图片转为base64字符串 + * @param imageFile + * @return + */ + public static String getImageString(MultipartFile imageFile){ + + InputStream is = null; + try { + byte[] data = null; + byte [] byteArr=imageFile.getBytes(); + is = new ByteArrayInputStream(byteArr); + data = new byte[is.available()]; + is.read(data); + return new String(Base64.encodeBase64(data)); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (null != is) { + try { + is.close(); + is = null; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return ""; + } + + /** + * 功能描述:将文件压缩到指定大小并上传 + * + * + * @Param desFileSize: 指定文件大小(单位为kb) + * @Param accuracy:精度(一般为0.5f) + * @Param mutipartfile:要压缩得图片 + * @return: File + * @auther: qyh + * @date: 2022/7/3 19:17 + */ + public static MultipartFile commpressPicCycle( long desFileSize, double accuracy,MultipartFile mutipartfile) throws IOException{ + String originalFilename = mutipartfile.getOriginalFilename(); + String[] filename = originalFilename.split("\\."); + File fileConver = convertFile(mutipartfile); + long fileSize = FileUtils.sizeOf(fileConver); + InputStream fileInputStream = new FileInputStream(fileConver); + // 判断图片大小是否小于指定图片大小 + if(fileSize <= desFileSize * 1024){ + + return new MockMultipartFile("mutilConver."+filename[1],mutipartfile.getOriginalFilename(),"text/plain",fileInputStream); + } + ByteArrayOutputStream bos = new ByteArrayOutputStream(1024); + byte[] b=new byte[1024]; + int n; + while ((n=fileInputStream.read(b))!=-1){ + bos.write(b,0,n); + } + byte[] bytes = bos.toByteArray(); + //计算宽高 + BufferedImage bim = ImageIO.read(new ByteArrayInputStream(bytes)); + int imgWidth = bim.getWidth(); + int imgHeight = bim.getHeight(); + int desWidth = new BigDecimal(imgWidth).multiply( new BigDecimal(accuracy)).intValue(); + int desHeight = new BigDecimal(imgHeight).multiply( new BigDecimal(accuracy)).intValue(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); //字节输出流(写入到内存) + //Thumbnails.of(new ByteArrayInputStream(bytes)).size(desWidth, desHeight).outputQuality(accuracy).toOutputStream(baos); + Thumbnails.of(fileConver).size(desWidth, desHeight).outputQuality(accuracy).toFile(fileConver); + System.out.println(fileConver.length()+"=========================="); + InputStream inputStream = new FileInputStream(fileConver); + mutipartfile=new MockMultipartFile("mutilConver."+filename[1],mutipartfile.getOriginalFilename(),"text/plain",inputStream); + System.out.println(mutipartfile.getSize()+"====================="); + fileInputStream.close(); + bos.close(); + //如果不满足要求,递归直至满足要求 + return commpressPicCycle(desFileSize,accuracy, mutipartfile); + } + + + /** + * 將MutipartFile轉file + * @param multipartFile + * @return + */ + public static File convertFile(MultipartFile multipartFile) { + File file = null; + try { + String originalFilename = multipartFile.getOriginalFilename(); + String[] filename = originalFilename.split("\\."); + if (filename[0].length()<3){ + filename[0]=filename[0]+"plus"; + } + file = File.createTempFile(filename[0], "."+filename[1]); + multipartFile.transferTo(file); + file.deleteOnExit(); + } catch (IOException e) { + e.printStackTrace(); + } + return file; + } } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/TiktokImgVo.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/TiktokImgVo.java new file mode 100644 index 0000000..24b32bb --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/TiktokImgVo.java @@ -0,0 +1,45 @@ +package com.bnyer.file.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + + +@Getter +@Setter +@ApiModel("抖音图片响应类") +public class TiktokImgVo implements Serializable { + + @ApiModelProperty(value="id") + private Long id; + + @ApiModelProperty(value="图片地址") + private String imgUrl; + + @ApiModelProperty(value="用户id") + private Long creatorId; + + @ApiModelProperty(value="分类id") + private Long typeId; + + @ApiModelProperty(value="下载量") + private Integer downloadNum; + + @ApiModelProperty(value="点赞量") + private Integer greatNum; + + @ApiModelProperty(value="收藏量") + private Integer collectionNum; + + @ApiModelProperty(value="状态(0->待审核;1->审核通过;2->审核拒绝)") + private String status; + + @ApiModelProperty(value="是否热门(0->冷门;1->热门)") + private String isHot; + + private String fileName; + private static final long serialVersionUID = 1L; +} diff --git a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml index ccea5fc..c56e817 100644 --- a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml +++ b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml @@ -12,7 +12,7 @@ spring: name: bnyer-file profiles: # 环境配置 - active: dev + active: prod servlet: multipart: maxFileSize: 5MB From 4e9264da7e48e249ed38467aeccadb013a3b5ffa Mon Sep 17 00:00:00 2001 From: chengkun <2500338766@qq.com> Date: Wed, 6 Jul 2022 10:42:25 +0800 Subject: [PATCH 5/8] =?UTF-8?q?feature1.0.0-img:=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bnyer/file/config/TikTokConfig.java | 6 +++ .../file/controller/SysFileController.java | 40 ++++--------------- .../com/bnyer/file/service/IQiniuService.java | 7 +++- .../file/service/impl/QiniuServiceImpl.java | 11 +---- .../service/impl/TikTokImageServiceImpl.java | 30 +------------- .../src/main/resources/bootstrap.yml | 2 +- 6 files changed, 23 insertions(+), 73 deletions(-) diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java index 03dfb26..a8ae6bf 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java @@ -24,4 +24,10 @@ public class TikTokConfig { @Value("${tiktok.grant_type}") private String grant_type; + + @Value("${tiktok.tokenUrl}") + private String tokenUrl; + + @Value("${tiktok.checkImgUrl}") + private String checkImgUrl; } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java index 1b31dec..fe1bf7c 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java @@ -1,13 +1,13 @@ package com.bnyer.file.controller; -import com.alibaba.fastjson.JSONObject; import com.bnyer.common.core.domain.R; import com.bnyer.file.service.IFileService; import com.bnyer.file.service.IQiniuService; -import com.bnyer.file.service.ITikTokImage; import com.bnyer.file.service.MinioService; import com.bnyer.file.utils.ImgUtil; import com.bnyer.file.vo.TiktokImgVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; @@ -16,7 +16,6 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -26,6 +25,7 @@ import java.util.List; * * @author ruoyi */ +@Api(value = "文件上传接口",tags = "文件上传接口") @RestController @Slf4j public class SysFileController { @@ -34,13 +34,12 @@ public class SysFileController { @Autowired private IQiniuService qiniuService; @Autowired - private ITikTokImage tikTokImage; - @Autowired private IFileService fileService; /** * 批量上传图片 */ + @ApiOperation(value="批量上传到七牛云") @PostMapping("/uploadBatch") public R> uploadBatch(MultipartFile[] files) { try { @@ -63,6 +62,7 @@ public class SysFileController { * @return * @throws IOException */ + @ApiOperation(value="批量压缩上传到七牛云") @PostMapping("/uploadBatchCompImg") public R> compression(MultipartFile[] files) throws IOException { List list = new ArrayList<>(); @@ -80,6 +80,7 @@ public class SysFileController { /** * 批量审核 */ + @ApiOperation(value="批量图片审核") @PostMapping("/checkBatch") public R> checkBatch(ArrayList files) { try { @@ -91,34 +92,7 @@ public class SysFileController { return R.fail("上传文件失败"); } } - - @PostMapping("/upload") - @ResponseBody - public R upload(@RequestParam("file") MultipartFile file) { - String url = null; - try { - //url = minioService.uploadFile(file); - // url=qiniuService.userUpload(file); - String imageString = ImgUtil.getImageString(file); - //System.out.println(imageString); - //JSONObject jsonObject = qiniuService.checkImageContent("data:application/octet-stream;base64," + imageString); - System.out.println("================================="); - //System.out.println(jsonObject); - tikTokImage.checkImageContent(file); - } catch (Exception e) { - log.error("文件上传失败,原因为:【{}】", e.getMessage()); - return R.fail("文件上传失败!"); - } - return R.ok(url); - } - - @PostMapping("/download") - @ResponseBody - public R download(@RequestParam("fileName") String fileName, HttpServletResponse response) { - minioService.download(fileName, response); - return R.ok(); - } - + @ApiOperation(value="批量上传到minio") @PostMapping("/uploadBanner") @ResponseBody public R uploadBanner(@RequestParam("file") MultipartFile file) { diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java index c023d30..9c845c7 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IQiniuService.java @@ -1,14 +1,17 @@ package com.bnyer.file.service; -import com.alibaba.fastjson.JSONObject; import org.springframework.web.multipart.MultipartFile; -import java.io.File; import java.util.ArrayList; public interface IQiniuService { String userUpload(MultipartFile file); + /** + * 检查图片内容是否符合规定 + * @param imageUrl 图片的url地址或者图片Base64编码(Base64编码请求时应在开头加上data:application/octet-stream;base64,) + * @return JSONObject + */ String checkImageContent(String imageUrl); /** diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java index 75a1e16..d55751e 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java @@ -2,10 +2,8 @@ package com.bnyer.file.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.alibaba.nacos.common.codec.Base64; import com.bnyer.file.config.QiniuConfig; import com.bnyer.file.service.IQiniuService; -import com.bnyer.file.utils.ImgUtil; import com.bnyer.file.utils.StringUtil; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; @@ -22,8 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -92,11 +88,7 @@ public class QiniuServiceImpl implements IQiniuService { return "error"; } - /** - * 检查图片内容是否符合规定 - * @param imageUrl 图片的url地址或者图片Base64编码(Base64编码请求时应在开头加上data:application/octet-stream;base64,) - * @return JSONObject - */ + @Override public String checkImageContent(String imageUrl) { //基础参数拼接 @@ -145,6 +137,7 @@ public class QiniuServiceImpl implements IQiniuService { * @param multipartFiles * @return 格式正确的文件 */ + @Override public ArrayList checkImageFormat(ArrayList multipartFiles){ ArrayList afterCheckFiles = new ArrayList<>(); for (MultipartFile multipartFile : multipartFiles) { diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java index e3a12ee..2a55015 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java @@ -3,34 +3,14 @@ package com.bnyer.file.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.alibaba.nacos.common.codec.Base64; import com.bnyer.file.config.TikTokConfig; -import com.bnyer.file.service.IQiniuService; import com.bnyer.file.service.ITikTokImage; import com.bnyer.file.utils.HttpUtils; import com.bnyer.file.utils.ImgUtil; -import com.bnyer.file.utils.StringUtil; -import com.google.gson.Gson; -import com.google.gson.JsonSyntaxException; -import com.qiniu.common.QiniuException; -import com.qiniu.common.Zone; -import com.qiniu.http.Client; -import com.qiniu.http.Response; -import com.qiniu.storage.Configuration; -import com.qiniu.storage.UploadManager; -import com.qiniu.storage.model.DefaultPutRet; -import com.qiniu.util.Auth; -import com.qiniu.util.StringMap; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; import java.util.HashMap; /** @@ -43,12 +23,6 @@ public class TikTokImageServiceImpl implements ITikTokImage { @Autowired private TikTokConfig tikTokConfig; - private String getTokenUrl="https://developer.toutiao.com/api/apps/v2/token"; - - private String checkImgUrl="https://developer.toutiao.com/api/apps/censor/image"; - public static void main(String[] args) { - } - @Override public Boolean checkImageContent(MultipartFile file) { String token=""; @@ -57,7 +31,7 @@ public class TikTokImageServiceImpl implements ITikTokImage { param.put("secret", tikTokConfig.getSecret()); param.put("grant_type", tikTokConfig.getGrant_type()); String body = JSON.toJSONString(param); - String res = HttpUtils.sendPost(getTokenUrl, body); + String res = HttpUtils.sendPost(tikTokConfig.getTokenUrl(), body); String err_tips = JSON.parseObject(res).get("err_tips").toString(); if (err_tips.equals("success")){ res=JSON.parseObject(res).get("data").toString(); @@ -69,7 +43,7 @@ public class TikTokImageServiceImpl implements ITikTokImage { checkParam.put("access_token", token); checkParam.put("image_data", ImgUtil.getImageString(file)); String checkBody = JSON.toJSONString(checkParam); - String checkRes = HttpUtils.sendPost(checkImgUrl, checkBody); + String checkRes = HttpUtils.sendPost(tikTokConfig.getCheckImgUrl(), checkBody); JSONObject jsonObject = JSON.parseObject(checkRes); JSONArray predicts = JSON.parseArray(jsonObject.get("predicts").toString()); for (Object predict : predicts) { diff --git a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml index c56e817..ccea5fc 100644 --- a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml +++ b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml @@ -12,7 +12,7 @@ spring: name: bnyer-file profiles: # 环境配置 - active: prod + active: dev servlet: multipart: maxFileSize: 5MB From 4295be8591769cdb9c22d7767e3ed09f52ad831f Mon Sep 17 00:00:00 2001 From: chengkun <2500338766@qq.com> Date: Wed, 6 Jul 2022 11:25:09 +0800 Subject: [PATCH 6/8] =?UTF-8?q?feature1.0.0-img:=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8E=8B=E7=BC=A9=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bnyer/file/config/ImgConfig.java | 25 +++++++++++++++++++ .../com/bnyer/file/config/TikTokConfig.java | 2 +- .../file/controller/SysFileController.java | 5 +++- .../service/impl/TikTokImageServiceImpl.java | 2 +- 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/ImgConfig.java diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/ImgConfig.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/ImgConfig.java new file mode 100644 index 0000000..e49c95c --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/ImgConfig.java @@ -0,0 +1,25 @@ +package com.bnyer.file.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +/** + * @Author: chengkun + * @Date: 2022-06-12-16:24 + * @Description: + */ +@Configuration +@RefreshScope +@Getter +@Setter +public class ImgConfig { + + @Value("${img.fileSize}") + private String fileSize; + + @Value("${img.accuracy}") + private String accuracy; +} diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java index a8ae6bf..147a993 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/TikTokConfig.java @@ -23,7 +23,7 @@ public class TikTokConfig { private String secret; @Value("${tiktok.grant_type}") - private String grant_type; + private String grantType; @Value("${tiktok.tokenUrl}") private String tokenUrl; diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java index fe1bf7c..3b5ad23 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java @@ -1,6 +1,7 @@ package com.bnyer.file.controller; import com.bnyer.common.core.domain.R; +import com.bnyer.file.config.ImgConfig; import com.bnyer.file.service.IFileService; import com.bnyer.file.service.IQiniuService; import com.bnyer.file.service.MinioService; @@ -35,6 +36,8 @@ public class SysFileController { private IQiniuService qiniuService; @Autowired private IFileService fileService; + @Autowired + private ImgConfig imgConfig; /** * 批量上传图片 @@ -67,7 +70,7 @@ public class SysFileController { public R> compression(MultipartFile[] files) throws IOException { List list = new ArrayList<>(); for (MultipartFile file : files) { - MultipartFile file1 = ImgUtil.commpressPicCycle(100, 0.5f, file); + MultipartFile file1 = ImgUtil.commpressPicCycle(Long.parseLong(imgConfig.getFileSize()), Double.parseDouble(imgConfig.getAccuracy()), file); System.out.println("sssss"); String url = qiniuService.userUpload(file1); list.add(url); diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java index 2a55015..7518975 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/TikTokImageServiceImpl.java @@ -29,7 +29,7 @@ public class TikTokImageServiceImpl implements ITikTokImage { HashMap param = new HashMap<>(); param.put("appId", tikTokConfig.getAppId()); param.put("secret", tikTokConfig.getSecret()); - param.put("grant_type", tikTokConfig.getGrant_type()); + param.put("grant_type", tikTokConfig.getGrantType()); String body = JSON.toJSONString(param); String res = HttpUtils.sendPost(tikTokConfig.getTokenUrl(), body); String err_tips = JSON.parseObject(res).get("err_tips").toString(); From 6195df0694b982a4878714f08871d86e23e2316f Mon Sep 17 00:00:00 2001 From: qyhdd Date: Wed, 6 Jul 2022 21:22:13 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=97=A0=E7=94=A8=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/controller/SysFileController.java | 6 ++-- .../com/bnyer/file/service/IFileService.java | 3 +- .../file/service/impl/FileServiceImpl.java | 28 +++++++++---------- .../file/service/impl/QiniuServiceImpl.java | 22 +-------------- .../java/com/bnyer/file/vo/ChekFileVo.java | 21 ++++++++++++++ 5 files changed, 41 insertions(+), 39 deletions(-) create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/ChekFileVo.java diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java index 3b5ad23..1fdfc41 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java @@ -6,6 +6,7 @@ import com.bnyer.file.service.IFileService; import com.bnyer.file.service.IQiniuService; import com.bnyer.file.service.MinioService; import com.bnyer.file.utils.ImgUtil; +import com.bnyer.file.vo.ChekFileVo; import com.bnyer.file.vo.TiktokImgVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -71,7 +72,6 @@ public class SysFileController { List list = new ArrayList<>(); for (MultipartFile file : files) { MultipartFile file1 = ImgUtil.commpressPicCycle(Long.parseLong(imgConfig.getFileSize()), Double.parseDouble(imgConfig.getAccuracy()), file); - System.out.println("sssss"); String url = qiniuService.userUpload(file1); list.add(url); } @@ -85,9 +85,9 @@ public class SysFileController { */ @ApiOperation(value="批量图片审核") @PostMapping("/checkBatch") - public R> checkBatch(ArrayList files) { + public R> checkBatch(ArrayList files) { try { - ArrayList list = fileService.checkImg(files); + ArrayList list = fileService.checkImg(files); // 上传并返回访问地址 return R.ok(list); } catch (Exception e) { diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java index 910d45e..b2112ae 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java @@ -1,5 +1,6 @@ package com.bnyer.file.service; +import com.bnyer.file.vo.ChekFileVo; import com.bnyer.file.vo.TiktokImgVo; import org.springframework.web.multipart.MultipartFile; @@ -11,5 +12,5 @@ import java.util.ArrayList; * @Description: */ public interface IFileService { - ArrayList checkImg(ArrayList multipartFiles); + ArrayList checkImg(ArrayList multipartFiles); } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java index 8c06a31..8467d84 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java @@ -10,6 +10,7 @@ import com.bnyer.file.service.IQiniuService; import com.bnyer.file.service.ITikTokImage; import com.bnyer.file.utils.HttpUtils; import com.bnyer.file.utils.ImgUtil; +import com.bnyer.file.vo.ChekFileVo; import com.bnyer.file.vo.TiktokImgVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -30,42 +31,41 @@ public class FileServiceImpl implements IFileService { @Autowired private ITikTokImage tikTokImage; @Override - public ArrayList checkImg(ArrayList multipartFiles) { - ArrayList tiktokImgVos = new ArrayList<>(); + public ArrayList checkImg(ArrayList multipartFiles) { + ArrayList chekFileVos = new ArrayList<>(); //返回通过校验的数组 ArrayList multipartFileList = qiniuService.checkImageFormat(multipartFiles); for (MultipartFile multipartFile : multipartFileList) { - TiktokImgVo tiktokImgVo = new TiktokImgVo(); + ChekFileVo chekFileVo = new ChekFileVo(); String filename = multipartFile.getResource().getFilename(); - tiktokImgVo.setFileName(filename); + chekFileVo.setFileName(filename); String imageString = ImgUtil.getImageString(multipartFile); String checkMsg = qiniuService.checkImageContent("data:application/octet-stream;base64," +imageString); if (checkMsg.equals("pass")){ //抖音图片检测二次检测 if (tikTokImage.checkImageContent(multipartFile)) { //可以通过 - tiktokImgVo.setStatus("1"); - tiktokImgVos.add(tiktokImgVo); + chekFileVo.setStatus("1"); + chekFileVos.add(chekFileVo); }else { //不可以通过 - tiktokImgVo.setStatus("2"); - tiktokImgVos.add(tiktokImgVo); + chekFileVo.setStatus("2"); + chekFileVos.add(chekFileVo); } continue; } if (checkMsg.equals("review")){ //人工审核 - tiktokImgVo.setStatus("0"); - tiktokImgVos.add(tiktokImgVo); + chekFileVo.setStatus("0"); + chekFileVos.add(chekFileVo); continue; } if (checkMsg.equals("block")){ //不可通过 - tiktokImgVo.setStatus("2"); - tiktokImgVos.add(tiktokImgVo); - continue; + chekFileVo.setStatus("2"); + chekFileVos.add(chekFileVo); } } - return tiktokImgVos; + return chekFileVos; } } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java index d55751e..9425da0 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/QiniuServiceImpl.java @@ -34,9 +34,6 @@ public class QiniuServiceImpl implements IQiniuService { @Autowired private QiniuConfig qiniuConfig; - - private String token = null; - private UploadManager uploadManager; private Zone zone = new Zone.Builder(Zone.autoZone()) .upHttp("http://upload.qiniup.com") .upHttps("http://upload.qiniup.com") @@ -81,8 +78,6 @@ public class QiniuServiceImpl implements IQiniuService { ioe.printStackTrace(); return "error"; } - //String path = qiniuService.uploadFile(file) - // System.out.print("七牛云返回的图片链接:" + path); return url; } return "error"; @@ -101,7 +96,6 @@ public class QiniuServiceImpl implements IQiniuService { String secretKey= qiniuConfig.getSecretKey(); Auth auth = Auth.create(accessKey, secretKey); String qiniuToken = "Qiniu " + auth.signRequestV2(url, method, body.getBytes(), contentType); - //log.info("url={},body={},qiniuToken={}",url,body,qiniuToken); //头部部分 StringMap header = new StringMap(); header.put("Host",host); @@ -111,20 +105,8 @@ public class QiniuServiceImpl implements IQiniuService { Client client = new Client(c); try { Response response = client.post(url, body.getBytes(), header, contentType); - //System.out.println(response.bodyString()); - //log.info("response result={}",response.bodyString()); JSONObject checkResult = JSON.parseObject(response.bodyString()); - String checkMsg = JSON.parseObject(checkResult.get("result").toString()).get("suggestion").toString(); - if (checkMsg.equals("pass")){ - //可以通过 - } - if (checkMsg.equals("review")){ - //人工审核 - } - if (checkMsg.equals("block")){ - //不可通过 - } - return checkMsg; + return JSON.parseObject(checkResult.get("result").toString()).get("suggestion").toString(); } catch (QiniuException e) { e.printStackTrace(); } @@ -182,8 +164,6 @@ public class QiniuServiceImpl implements IQiniuService { videoSuffixList.add("mp4"); videoSuffixList.add("mov"); videoSuffixList.add("wmv"); -// imageSuffix.add("jpg"); -// imageSuffix.add("jpg"); if (suffix != null&&imageSuffixList.contains(suffix)&&multipartFile.getSize() / 1024 < 50000&&multipartFile.getSize() / 1024 > 0) { afterCheckFiles.add(multipartFile); } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/ChekFileVo.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/ChekFileVo.java new file mode 100644 index 0000000..12f6e03 --- /dev/null +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/ChekFileVo.java @@ -0,0 +1,21 @@ +package com.bnyer.file.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + * @Author qyh + * @Date 2022/7/6 21:16 + * @Description + */ +@Getter +@Setter +@ApiModel("图片检查响应类") +public class ChekFileVo { + @ApiModelProperty(value="状态(0->待审核;1->审核通过;2->审核拒绝)") + private String status; + @ApiModelProperty(value="文件名称") + private String fileName; +} From e0db425db7f8957c3094ee4e80aabfdc456e5d7e Mon Sep 17 00:00:00 2001 From: penny <2500338766@qq.com> Date: Wed, 6 Jul 2022 22:52:59 +0800 Subject: [PATCH 8/8] =?UTF-8?q?feature1.0.0-img:=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/controller/SysFileController.java | 1 - .../com/bnyer/file/service/IFileService.java | 1 - .../com/bnyer/file/service/MinioService.java | 6 ------ .../file/service/MinioSysFileServiceImpl.java | 17 ----------------- .../file/service/impl/FileServiceImpl.java | 8 -------- 5 files changed, 33 deletions(-) diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java index 1fdfc41..f15f167 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java @@ -7,7 +7,6 @@ import com.bnyer.file.service.IQiniuService; import com.bnyer.file.service.MinioService; import com.bnyer.file.utils.ImgUtil; import com.bnyer.file.vo.ChekFileVo; -import com.bnyer.file.vo.TiktokImgVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java index b2112ae..e11f7cc 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java @@ -1,7 +1,6 @@ package com.bnyer.file.service; import com.bnyer.file.vo.ChekFileVo; -import com.bnyer.file.vo.TiktokImgVo; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/MinioService.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/MinioService.java index e6f2edb..9a7b498 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/MinioService.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/MinioService.java @@ -39,10 +39,4 @@ public interface MinioService { */ String uploadFileByThumb(MultipartFile file) throws Exception; - /** - * 下载图片 - * @param fileName 文件名 - * @param response 响应 - */ - void download(String fileName, HttpServletResponse response); } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/MinioSysFileServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/MinioSysFileServiceImpl.java index f3e22f0..84fd167 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/MinioSysFileServiceImpl.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/MinioSysFileServiceImpl.java @@ -88,21 +88,4 @@ public class MinioSysFileServiceImpl implements MinioService client.putObject(args); return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + multipartFile.getName(); } - - @Override - public void download(String fileName, HttpServletResponse response) { - // 获取对象的元数据 - try{ - ObjectStat stat = client.statObject(minioConfig.getBucketName(), fileName); - response.setContentType(stat.contentType()); - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); - InputStream is = client.getObject(minioConfig.getBucketName(), fileName); - IOUtils.copy(is, response.getOutputStream()); - is.close(); - }catch (Exception e){ - log.error("文件下载失败!原因为:",e); - e.printStackTrace(); - } - } } diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java index 8467d84..67a10a9 100644 --- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java +++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java @@ -1,23 +1,15 @@ package com.bnyer.file.service.impl; -import cn.hutool.core.img.Img; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.bnyer.file.config.TikTokConfig; import com.bnyer.file.service.IFileService; import com.bnyer.file.service.IQiniuService; import com.bnyer.file.service.ITikTokImage; -import com.bnyer.file.utils.HttpUtils; import com.bnyer.file.utils.ImgUtil; import com.bnyer.file.vo.ChekFileVo; -import com.bnyer.file.vo.TiktokImgVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; -import java.util.HashMap; /** * @Author: Yeman