Browse Source

chore: File Upload Refactoring

master
wangxiang 2 years ago
parent
commit
82857190cb
No known key found for this signature in database
GPG Key ID: 1BA7946AB6B232E4
  1. 2
      kicc-common/kicc-common-seata/README.md
  2. 2
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/OssFile.java
  3. 20
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/FileController.java
  4. 4
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/mapper/FileMapper.java
  5. 8
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/FileService.java
  6. 24
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/FileServiceImpl.java
  7. 17
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/ImContentServiceImpl.java

2
kicc-common/kicc-common-seata/README.md

@ -253,4 +253,4 @@
} }
``` ```
- 未发现用feign拦截器进行request插入参数 XID的配置;对于请求的XID如何传递,暂时未看到源码。 - 未发现用feign拦截器进行request插入参数 XID的配置;对于请求的XID如何传递,暂时未看到源码。

2
kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/File.java → kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/OssFile.java

@ -19,7 +19,7 @@ import lombok.experimental.Accessors;
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@Accessors(chain = true) @Accessors(chain = true)
@TableName(value = "sys_file", excludeProperty = { "remarks" }) @TableName(value = "sys_file", excludeProperty = { "remarks" })
public class File extends CommonEntity { public class OssFile extends CommonEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

20
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/FileController.java

@ -10,7 +10,7 @@ import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.AppConstants; import com.cloud.kicc.common.core.constant.AppConstants;
import com.cloud.kicc.common.log.annotation.SysLog; import com.cloud.kicc.common.log.annotation.SysLog;
import com.cloud.kicc.common.security.annotation.Inner; import com.cloud.kicc.common.security.annotation.Inner;
import com.cloud.kicc.system.api.entity.File; import com.cloud.kicc.system.api.entity.OssFile;
import com.cloud.kicc.system.api.entity.Role; import com.cloud.kicc.system.api.entity.Role;
import com.cloud.kicc.system.service.FileService; import com.cloud.kicc.system.service.FileService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -41,23 +41,23 @@ public class FileController {
private final FileService fileService; private final FileService fileService;
private LambdaQueryWrapper<File> getQueryWrapper(File file) { private LambdaQueryWrapper<OssFile> getQueryWrapper(OssFile ossFile) {
return new LambdaQueryWrapper<File>() return new LambdaQueryWrapper<OssFile>()
.like(StrUtil.isNotBlank(file.getFileName()), File::getFileName, file.getFileName()) .like(StrUtil.isNotBlank(ossFile.getFileName()), OssFile::getFileName, ossFile.getFileName())
.orderByDesc(File::getCreateTime); .orderByDesc(OssFile::getCreateTime);
} }
@GetMapping("/list") @GetMapping("/list")
@ApiOperation(value = "分页查询", notes = "分页查询") @ApiOperation(value = "分页查询", notes = "分页查询")
public R list(Page page, File file) { public R list(Page page, OssFile ossFile) {
IPage<Role> fileIPage = fileService.page(page, getQueryWrapper(file)); IPage<Role> fileIPage = fileService.page(page, getQueryWrapper(ossFile));
return R.ok(fileIPage.getRecords(), fileIPage.getTotal()); return R.ok(fileIPage.getRecords(), fileIPage.getTotal());
} }
@PostMapping("/upload") @PostMapping("/upload")
public File upload(@RequestPart("file") MultipartFile file, public OssFile upload(@RequestPart("file") MultipartFile file,
@RequestParam(value = "ossFile", required=false) String ossFile) { @RequestParam(value = "ossFile", required=false) String ossFile) {
return fileService.uploadFile(file, Optional.ofNullable(ossFile).map(item -> JSONUtil.parseObj(ossFile).toBean(File.class)).orElse(null)); return fileService.uploadFile(file, Optional.ofNullable(ossFile).map(item -> JSONUtil.parseObj(ossFile).toBean(OssFile.class)).orElse(null));
} }

4
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/mapper/FileMapper.java

@ -1,7 +1,7 @@
package com.cloud.kicc.system.mapper; package com.cloud.kicc.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cloud.kicc.system.api.entity.File; import com.cloud.kicc.system.api.entity.OssFile;
/** /**
*<p> *<p>
@ -11,6 +11,6 @@ import com.cloud.kicc.system.api.entity.File;
* @Author: wangxiang4 * @Author: wangxiang4
* @Date: 2022/2/24 * @Date: 2022/2/24
*/ */
public interface FileMapper extends BaseMapper<File> { public interface FileMapper extends BaseMapper<OssFile> {
} }

8
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/FileService.java

@ -1,12 +1,10 @@
package com.cloud.kicc.system.service; package com.cloud.kicc.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.cloud.kicc.system.api.entity.File; import com.cloud.kicc.system.api.entity.OssFile;
import com.cloud.kicc.common.core.api.R;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/** /**
*<p> *<p>
@ -16,14 +14,14 @@ import java.util.Map;
* @Author: wangxiang4 * @Author: wangxiang4
* @Date: 2022/2/24 * @Date: 2022/2/24
*/ */
public interface FileService extends IService<File> { public interface FileService extends IService<OssFile> {
/** /**
* 上传文件 * 上传文件
* @param file * @param file
* @return * @return
*/ */
File uploadFile(MultipartFile file, File ossFile); OssFile uploadFile(MultipartFile file, OssFile ossFile);
/** /**
* 读取文件 * 读取文件

24
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/FileServiceImpl.java

@ -10,10 +10,9 @@ import cn.hutool.core.util.StrUtil;
import com.amazonaws.services.s3.model.S3Object; import com.amazonaws.services.s3.model.S3Object;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloud.kicc.common.core.exception.CheckedException; import com.cloud.kicc.common.core.exception.CheckedException;
import com.cloud.kicc.system.api.entity.File; import com.cloud.kicc.system.api.entity.OssFile;
import com.cloud.kicc.system.mapper.FileMapper; import com.cloud.kicc.system.mapper.FileMapper;
import com.cloud.kicc.system.service.FileService; import com.cloud.kicc.system.service.FileService;
import com.cloud.kicc.common.core.api.R;
import com.pig4cloud.plugin.oss.OssProperties; import com.pig4cloud.plugin.oss.OssProperties;
import com.pig4cloud.plugin.oss.service.OssTemplate; import com.pig4cloud.plugin.oss.service.OssTemplate;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -24,8 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/** /**
*<p> *<p>
* 文件管理 * 文件管理
@ -37,30 +35,30 @@ import java.util.Map;
@Slf4j @Slf4j
@Service @Service
@AllArgsConstructor @AllArgsConstructor
public class FileServiceImpl extends ServiceImpl<FileMapper, File> implements FileService { public class FileServiceImpl extends ServiceImpl<FileMapper, OssFile> implements FileService {
private final OssProperties ossProperties; private final OssProperties ossProperties;
private final OssTemplate ossTemplate; private final OssTemplate ossTemplate;
@Override @Override
public File uploadFile(MultipartFile file, File ossFile) { public OssFile uploadFile(MultipartFile file, OssFile ossFile) {
String fileName = IdUtil.simpleUUID() + StrUtil.DOT + FileUtil.extName(file.getOriginalFilename()); String fileName = IdUtil.simpleUUID() + StrUtil.DOT + FileUtil.extName(file.getOriginalFilename());
File defaultOssFile = new File().setFileName(fileName) OssFile defaultOssOssFile = new OssFile().setFileName(fileName)
.setBucketName(ossProperties.getBucketName()) .setBucketName(ossProperties.getBucketName())
.setOriginal(file.getOriginalFilename()) .setOriginal(file.getOriginalFilename())
.setType(FileUtil.extName(file.getOriginalFilename())) .setType(FileUtil.extName(file.getOriginalFilename()))
.setFileSize(file.getSize()) .setFileSize(file.getSize())
.setAvailablePath(String.format("/system_proxy/system/file/getFile/%s/%s", ossProperties.getBucketName(), fileName)) .setAvailablePath(String.format("/system_proxy/system/file/getFile/%s/%s", ossProperties.getBucketName(), fileName))
.setMimeType(file.getContentType()); .setMimeType(file.getContentType());
if(ObjectUtil.isNotEmpty(ossFile)) BeanUtil.copyProperties(ossFile, defaultOssFile, CopyOptions.create().ignoreNullValue().ignoreError()); if(ObjectUtil.isNotEmpty(ossFile)) BeanUtil.copyProperties(ossFile, defaultOssOssFile, CopyOptions.create().ignoreNullValue().ignoreError());
try { try {
ossTemplate.putObject(ossProperties.getBucketName(), fileName, file.getContentType(), file.getInputStream()); ossTemplate.putObject(ossProperties.getBucketName(), fileName, file.getContentType(), file.getInputStream());
// 文件管理数据记录,收集管理追踪文件 // 文件管理数据记录,收集管理追踪文件
this.save(defaultOssFile); this.save(defaultOssOssFile);
} catch (Exception e) { } catch (Exception e) {
throw new CheckedException("上传失败"); throw new CheckedException("上传失败");
} }
return defaultOssFile; return defaultOssOssFile;
} }
@Override @Override
@ -77,9 +75,9 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, File> implements Fi
@SneakyThrows @SneakyThrows
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteFile(String id) { public void deleteFile(String id) {
File file = this.getById(id); OssFile ossFile = this.getById(id);
if (ObjectUtil.isNotEmpty(file)) { if (ObjectUtil.isNotEmpty(ossFile)) {
ossTemplate.removeObject(ossProperties.getBucketName(), file.getFileName()); ossTemplate.removeObject(ossProperties.getBucketName(), ossFile.getFileName());
this.removeById(id); this.removeById(id);
} }
} }

17
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/ImContentServiceImpl.java

@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloud.kicc.common.core.exception.CheckedException; import com.cloud.kicc.common.core.exception.CheckedException;
import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.system.api.entity.ImContent; import com.cloud.kicc.system.api.entity.ImContent;
import com.cloud.kicc.system.api.entity.OssFile;
import com.cloud.kicc.system.api.enums.ImMessageTypeEnum; import com.cloud.kicc.system.api.enums.ImMessageTypeEnum;
import com.cloud.kicc.system.mapper.ImContentMapper; import com.cloud.kicc.system.mapper.ImContentMapper;
import com.cloud.kicc.system.service.FileService; import com.cloud.kicc.system.service.FileService;
@ -76,7 +77,7 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent
String receiveFileName = IdUtil.simpleUUID() + StrUtil.DOT + FileUtil.extName(speechName); String receiveFileName = IdUtil.simpleUUID() + StrUtil.DOT + FileUtil.extName(speechName);
// 构建发送文件信息进行OSS存储 // 构建发送文件信息进行OSS存储
com.cloud.kicc.system.api.entity.File sendOssFile = new com.cloud.kicc.system.api.entity.File() OssFile sendOssOssFile = new OssFile()
.setFileName(sendFileName) .setFileName(sendFileName)
.setBucketName(ossProperties.getBucketName()) .setBucketName(ossProperties.getBucketName())
.setOriginal(file.getOriginalFilename()) .setOriginal(file.getOriginalFilename())
@ -85,9 +86,9 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent
.setMimeType(file.getContentType()); .setMimeType(file.getContentType());
ossTemplate.putObject(ossProperties.getBucketName(), sendFileName, file.getContentType(), file.getInputStream()); ossTemplate.putObject(ossProperties.getBucketName(), sendFileName, file.getContentType(), file.getInputStream());
String sendVoiceUrl = ossTemplate.getObjectURL(ossProperties.getBucketName(), sendFileName); String sendVoiceUrl = ossTemplate.getObjectURL(ossProperties.getBucketName(), sendFileName);
sendOssFile.setAvailablePath(sendVoiceUrl); sendOssOssFile.setAvailablePath(sendVoiceUrl);
fileService.save(sendOssFile); fileService.save(sendOssOssFile);
imContent.setFiles(sendOssFile.getId()); imContent.setFiles(sendOssOssFile.getId());
// 语音转文字 // 语音转文字
File voiceFile = File.createTempFile(sendFileName, null); File voiceFile = File.createTempFile(sendFileName, null);
@ -119,7 +120,7 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent
ResponseBody responseBody = openAiService.createSpeech(createSpeechRequest); ResponseBody responseBody = openAiService.createSpeech(createSpeechRequest);
// 构建发送文件信息进行OSS存储 // 构建发送文件信息进行OSS存储
com.cloud.kicc.system.api.entity.File receiveOssFile = new com.cloud.kicc.system.api.entity.File() OssFile receiveOssOssFile = new OssFile()
.setFileName(receiveFileName) .setFileName(receiveFileName)
.setBucketName(ossProperties.getBucketName()) .setBucketName(ossProperties.getBucketName())
.setOriginal(speechName) .setOriginal(speechName)
@ -128,11 +129,11 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent
.setMimeType(Objects.requireNonNull(responseBody.contentType()).toString()); .setMimeType(Objects.requireNonNull(responseBody.contentType()).toString());
ossTemplate.putObject(ossProperties.getBucketName(), receiveFileName, Objects.requireNonNull(responseBody.contentType()).toString(), responseBody.byteStream()); ossTemplate.putObject(ossProperties.getBucketName(), receiveFileName, Objects.requireNonNull(responseBody.contentType()).toString(), responseBody.byteStream());
String receiveVoiceUrl = ossTemplate.getObjectURL(ossProperties.getBucketName(), receiveFileName); String receiveVoiceUrl = ossTemplate.getObjectURL(ossProperties.getBucketName(), receiveFileName);
receiveOssFile.setAvailablePath(receiveVoiceUrl); receiveOssOssFile.setAvailablePath(receiveVoiceUrl);
fileService.save(receiveOssFile); fileService.save(receiveOssOssFile);
// 保存AI回复聊天记录 // 保存AI回复聊天记录
imContent.setFiles(receiveOssFile.getId()); imContent.setFiles(receiveOssOssFile.getId());
super.save(content); super.save(content);
return content; return content;
} else { } else {

Loading…
Cancel
Save