Browse Source

上传文件保存(异步)

feature-1.0-img-prototype
qyhdd 4 years ago
parent
commit
7abafa5bb2
  1. 6
      bnyer-services/bnyer-file/pom.xml
  2. 2
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/BnyerFileApplication.java
  3. 33
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/config/ExecutorConfig.java
  4. 17
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/controller/SysFileController.java
  5. 19
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileDto.java
  6. 2
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/dto/FileUploadDto.java
  7. 3
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/IFileService.java
  8. 53
      bnyer-services/bnyer-file/src/main/java/com/bnyer/file/service/impl/FileServiceImpl.java

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>

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

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

17
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<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(files);
fileUploadDto.setFiles(fileDtos);
fileUploadDto.setCreatorId(creatorId);
fileUploadDto.setTypeId(typeId);
fileService.checkUploadSave(fileUploadDto);

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

2
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<MultipartFile> files;
private ArrayList<FileDto> files;
}

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

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

Loading…
Cancel
Save