Browse Source

Merge remote-tracking branch 'remotes/origin/feature-1.0-img-quan' into feature-1.0-img

feature-1.0-img-prototype
penny 4 years ago
parent
commit
18e711f4a9
  1. 7
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/dto/TiktokImgMiniDto.java
  2. 2
      bnyer-gateway/src/main/resources/bootstrap.yml
  3. 6
      bnyer-services/bnyer-file/pom.xml
  4. 4
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/BnyerFileApplication.java
  5. 33
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/ExecutorConfig.java
  6. 39
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java
  7. 19
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileDto.java
  8. 38
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileUploadDto.java
  9. 4
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java
  10. 54
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java
  11. 3
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/ChekFileVo.java
  12. 9
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/vo/UploadVo.java

7
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);

2
bnyer-gateway/src/main/resources/bootstrap.yml

@ -1,6 +1,6 @@
# Tomcat
server:
port: 7010
port: 6010
# Spring
spring:

6
bnyer-services/bnyer-file/pom.xml

@ -102,7 +102,11 @@
<groupId>com.dimensionalnode</groupId>
<artifactId>bnyer-common-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>

4
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
{

33
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;
}
}

39
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<MultipartFile> files) {
try {
ArrayList<FileDto> 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();
}
}

19
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;
}

38
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<FileDto> files;
}

4
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<ChekFileVo> checkImg(ArrayList<MultipartFile> multipartFiles);
//图片检测+图片上传+图片保存
void checkUploadSave(FileUploadDto fileUploadDto) throws IOException;
}

54
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<ChekFileVo> checkImg(ArrayList<MultipartFile> multipartFiles) {
ArrayList<ChekFileVo> chekFileVos = new ArrayList<>();
@ -29,21 +45,22 @@ public class FileServiceImpl implements IFileService {
ArrayList<MultipartFile> 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<MultipartFile> 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);
}
}
}

3
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;
}

9
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 {
}
Loading…
Cancel
Save