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