diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/dto/TiktokImgMiniDto.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/dto/TiktokImgMiniDto.java
index 848255a..870f465 100644
--- a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/dto/TiktokImgMiniDto.java
+++ b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/dto/TiktokImgMiniDto.java
@@ -27,6 +27,13 @@ public class TiktokImgMiniDto implements Serializable {
@ApiModelProperty(value="分类id")
private Long typeId;
+ /**
+ * 状态(0->待审核;1->审核通过)
+ */
+ @ApiModelProperty(value="状态(0->待审核;1->审核通过;2->审核拒绝)")
+ private String status;
+
+
public TiktokImg extractParam(){
TiktokImg tiktokImg = new TiktokImg();
BeanUtils.copyProperties(this,tiktokImg);
diff --git a/bnyer-gateway/src/main/resources/bootstrap.yml b/bnyer-gateway/src/main/resources/bootstrap.yml
index f52b854..e6b60c7 100644
--- a/bnyer-gateway/src/main/resources/bootstrap.yml
+++ b/bnyer-gateway/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
# Tomcat
server:
- port: 7010
+ port: 6010
# Spring
spring:
diff --git a/bnyer-services/bnyer-file/pom.xml b/bnyer-services/bnyer-file/pom.xml
index 9a75fc8..6b8458d 100644
--- a/bnyer-services/bnyer-file/pom.xml
+++ b/bnyer-services/bnyer-file/pom.xml
@@ -102,7 +102,11 @@
com.dimensionalnode
bnyer-common-security
-
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/BnyerFileApplication.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/BnyerFileApplication.java
index a41353f..b162e1b 100644
--- a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/BnyerFileApplication.java
+++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/BnyerFileApplication.java
@@ -2,9 +2,12 @@ package com.bnyer.file;
import com.bnyer.common.security.annotation.EnableRyFeignClients;
import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import com.bnyer.common.swagger.annotation.EnableCustomSwagger2;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableAsync;
/**
* 文件服务
@@ -13,6 +16,7 @@ import com.bnyer.common.swagger.annotation.EnableCustomSwagger2;
*/
@EnableCustomSwagger2
@EnableRyFeignClients
+@EnableAsync
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
public class BnyerFileApplication
{
diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/ExecutorConfig.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/ExecutorConfig.java
new file mode 100644
index 0000000..cfb5c7f
--- /dev/null
+++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/ExecutorConfig.java
@@ -0,0 +1,33 @@
+package com.bnyer.file.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * @Author qyh
+ * @Date 2022/7/10 15:31
+ * @Description
+ */
+@Configuration
+@EnableAsync
+public class ExecutorConfig {
+
+
+ @Bean
+ public Executor mySimpleAsync() {
+ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+ executor.setCorePoolSize(10);
+ executor.setMaxPoolSize(50);
+ executor.setQueueCapacity(10);
+ executor.setThreadNamePrefix("fileUpload");
+ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ executor.initialize();
+ return executor;
+ }
+}
\ 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 f15f167..586ccc4 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,7 +1,10 @@
package com.bnyer.file.controller;
+import cn.hutool.log.Log;
import com.bnyer.common.core.domain.R;
import com.bnyer.file.config.ImgConfig;
+import com.bnyer.file.dto.FileDto;
+import com.bnyer.file.dto.FileUploadDto;
import com.bnyer.file.service.IFileService;
import com.bnyer.file.service.IQiniuService;
import com.bnyer.file.service.MinioService;
@@ -10,13 +13,12 @@ import com.bnyer.file.vo.ChekFileVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.util.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
+import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -39,6 +41,7 @@ public class SysFileController {
@Autowired
private ImgConfig imgConfig;
+
/**
* 批量上传图片
*/
@@ -107,5 +110,33 @@ public class SysFileController {
}
return R.ok(url);
}
+ public static final String UPLOAD_PREFIX_PATH = "/opt/uploading";
+ @ApiOperation(value="图片批量检测上传保存")
+ @PostMapping("/checkUploadSave")
+ @ResponseBody
+ public R checkUploadSave(@RequestParam Long creatorId, @RequestParam Long typeId, @RequestParam ArrayList files) {
+ try {
+ ArrayList fileDtos = new ArrayList<>();
+ for (MultipartFile file : files) {
+ FileDto fileDto = new FileDto();
+ byte[] bytes = IOUtils.toByteArray(file.getInputStream());
+ fileDto.setBytes(bytes);
+ fileDto.setName(file.getName());
+ fileDto.setOriginalFilename(file.getOriginalFilename());
+ fileDtos.add(fileDto);
+ }
+ // 生成临时文件
+
+ FileUploadDto fileUploadDto = new FileUploadDto();
+ fileUploadDto.setFiles(fileDtos);
+ fileUploadDto.setCreatorId(creatorId);
+ fileUploadDto.setTypeId(typeId);
+ fileService.checkUploadSave(fileUploadDto);
+ } catch (Exception e) {
+ log.error("文件上传失败,原因为:【{}】", e.getMessage());
+ return R.fail("banner上传失败!");
+ }
+ return R.ok();
+ }
}
diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileDto.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileDto.java
new file mode 100644
index 0000000..245240f
--- /dev/null
+++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileDto.java
@@ -0,0 +1,19 @@
+package com.bnyer.file.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Author qyh
+ * @Date 2022/7/10 16:37
+ * @Description
+ */
+@Getter
+@Setter
+@ApiModel("文件信息")
+public class FileDto {
+ private byte[] bytes;
+ private String originalFilename;
+ private String name;
+}
diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileUploadDto.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileUploadDto.java
new file mode 100644
index 0000000..e2a8757
--- /dev/null
+++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileUploadDto.java
@@ -0,0 +1,38 @@
+package com.bnyer.file.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+
+/**
+ * @Author qyh
+ * @Date 2022/7/9 18:24
+ * @Description
+ */
+@Getter
+@Setter
+@ApiModel("文件上传")
+public class FileUploadDto {
+
+ @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="状态(0->待审核;1->审核通过;2->审核拒绝)")
+ private String status;
+
+ @ApiModelProperty(value="要上传的图片")
+ private ArrayList files;
+}
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 e11f7cc..530e4e3 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,8 +1,10 @@
package com.bnyer.file.service;
+import com.bnyer.file.dto.FileUploadDto;
import com.bnyer.file.vo.ChekFileVo;
import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
import java.util.ArrayList;
/**
@@ -12,4 +14,6 @@ import java.util.ArrayList;
*/
public interface IFileService {
ArrayList checkImg(ArrayList multipartFiles);
+ //图片检测+图片上传+图片保存
+ void checkUploadSave(FileUploadDto fileUploadDto) throws IOException;
}
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 67a10a9..bd806d8 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,15 +1,29 @@
package com.bnyer.file.service.impl;
+import com.bnyer.file.dto.FileDto;
+import com.bnyer.file.dto.FileUploadDto;
import com.bnyer.file.service.IFileService;
import com.bnyer.file.service.IQiniuService;
import com.bnyer.file.service.ITikTokImage;
import com.bnyer.file.utils.ImgUtil;
import com.bnyer.file.vo.ChekFileVo;
+import com.bnyer.file.vo.TiktokImgVo;
+import com.bnyer.img.api.RemoteImgService;
+import com.bnyer.img.api.dto.TiktokImgMiniDto;
+import com.bnyer.system.api.RemoteFileService;
+import org.apache.http.entity.ContentType;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
+import javax.annotation.Resource;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.ArrayList;
+import java.util.UUID;
/**
* @Author: Yeman
@@ -22,6 +36,8 @@ public class FileServiceImpl implements IFileService {
private IQiniuService qiniuService;
@Autowired
private ITikTokImage tikTokImage;
+ @Autowired
+ private RemoteImgService remoteImgService;
@Override
public ArrayList checkImg(ArrayList multipartFiles) {
ArrayList chekFileVos = new ArrayList<>();
@@ -29,21 +45,22 @@ public class FileServiceImpl implements IFileService {
ArrayList multipartFileList = qiniuService.checkImageFormat(multipartFiles);
for (MultipartFile multipartFile : multipartFileList) {
ChekFileVo chekFileVo = new ChekFileVo();
+ chekFileVo.setFile(multipartFile);
String filename = multipartFile.getResource().getFilename();
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)) {
+// if (tikTokImage.checkImageContent(multipartFile)) {
//可以通过
chekFileVo.setStatus("1");
chekFileVos.add(chekFileVo);
- }else {
- //不可以通过
- chekFileVo.setStatus("2");
- chekFileVos.add(chekFileVo);
- }
+// }else {
+// //不可以通过
+// chekFileVo.setStatus("2");
+// chekFileVos.add(chekFileVo);
+// }
continue;
}
if (checkMsg.equals("review")){
@@ -60,4 +77,29 @@ public class FileServiceImpl implements IFileService {
}
return chekFileVos;
}
+
+ @Override
+ @Async("mySimpleAsync")
+ public void checkUploadSave(FileUploadDto fileUploadDto) throws IOException {
+ ArrayList multipartFiles = new ArrayList<>();
+ for (FileDto fileDto : fileUploadDto.getFiles()) {
+ InputStream inputStream = new ByteArrayInputStream(fileDto.getBytes());
+ MultipartFile files = new MockMultipartFile(fileDto.getName(), fileDto.getOriginalFilename(), ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);
+ //System.out.println(files.getSize());
+ multipartFiles.add(files);
+ }
+
+ //检测图片
+ for (ChekFileVo chekFileVo : checkImg(multipartFiles)) {
+ //图片上传
+ String imgUrl = qiniuService.userUpload(chekFileVo.getFile());
+ TiktokImgMiniDto tiktokImg = new TiktokImgMiniDto();
+ tiktokImg.setImgUrl(imgUrl);
+ tiktokImg.setStatus(chekFileVo.getStatus());
+ tiktokImg.setTypeId(fileUploadDto.getTypeId());
+ tiktokImg.setCreatorId(fileUploadDto.getCreatorId());
+ remoteImgService.insertTiktokImg(tiktokImg);
+ }
+ }
+
}
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
index 12f6e03..28ba930 100644
--- 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
@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
+import org.springframework.web.multipart.MultipartFile;
/**
* @Author qyh
@@ -18,4 +19,6 @@ public class ChekFileVo {
private String status;
@ApiModelProperty(value="文件名称")
private String fileName;
+ @ApiModelProperty(value = "文件")
+ private MultipartFile file;
}
diff --git a/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/UploadVo.java b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/UploadVo.java
new file mode 100644
index 0000000..105e70b
--- /dev/null
+++ b/bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/UploadVo.java
@@ -0,0 +1,9 @@
+package com.bnyer.file.vo;
+
+/**
+ * @Author qyh
+ * @Date 2022/7/9 18:22
+ * @Description
+ */
+public class UploadVo {
+}
diff --git a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml
index ccea5fc..a1621ce 100644
--- a/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml
+++ b/bnyer-services/bnyer-file/src/main/resources/bootstrap.yml
@@ -15,4 +15,4 @@ spring:
active: dev
servlet:
multipart:
- maxFileSize: 5MB
+ maxFileSize: 5MB
\ No newline at end of file