From 7abafa5bb27694e23f0169752d709861210ee020 Mon Sep 17 00:00:00 2001 From: qyhdd Date: Sun, 10 Jul 2022 17:01:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=EF=BC=88=E5=BC=82=E6=AD=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bnyer-services/bnyer-file/pom.xml | 6 ++- .../com/bnyer/file/BnyerFileApplication.java | 2 + .../com/bnyer/file/config/ExecutorConfig.java | 33 ++++++++++++ .../file/controller/SysFileController.java | 17 +++++- .../main/java/com/bnyer/file/dto/FileDto.java | 19 +++++++ .../com/bnyer/file/dto/FileUploadDto.java | 2 +- .../com/bnyer/file/service/IFileService.java | 3 +- .../file/service/impl/FileServiceImpl.java | 53 ++++++++++++------- .../src/main/resources/bootstrap.yml | 2 +- 9 files changed, 113 insertions(+), 24 deletions(-) create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/ExecutorConfig.java create mode 100644 bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileDto.java 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 1ad45cc..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 @@ -7,6 +7,7 @@ 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; /** * 文件服务 @@ -15,6 +16,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients; */ @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 33666e3..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 @@ -3,6 +3,7 @@ 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; @@ -12,6 +13,7 @@ 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.*; import org.springframework.web.multipart.MultipartFile; @@ -108,14 +110,25 @@ 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(files); + fileUploadDto.setFiles(fileDtos); fileUploadDto.setCreatorId(creatorId); fileUploadDto.setTypeId(typeId); fileService.checkUploadSave(fileUploadDto); 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 index dbb439f..e2a8757 100644 --- 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 @@ -34,5 +34,5 @@ public class FileUploadDto { private String status; @ApiModelProperty(value="要上传的图片") - private ArrayList files; + 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 d57ed55..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 @@ -4,6 +4,7 @@ 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; /** @@ -14,5 +15,5 @@ import java.util.ArrayList; public interface IFileService { ArrayList checkImg(ArrayList multipartFiles); //图片检测+图片上传+图片保存 - void checkUploadSave(FileUploadDto fileUploadDto); + 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 0394ebe..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,5 +1,6 @@ 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; @@ -10,12 +11,19 @@ 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 @@ -44,15 +52,15 @@ public class FileServiceImpl implements IFileService { 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")){ @@ -71,18 +79,27 @@ public class FileServiceImpl implements IFileService { } @Override - public void checkUploadSave(FileUploadDto fileUploadDto) { - //检测图片 - for (ChekFileVo chekFileVo : checkImg(fileUploadDto.getFiles())) { - //图片上传 - 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); - } + @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/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