1
0
mirror of https://gitee.com/bookshelfplus/bookshelfplus synced 2025-09-01 22:53:29 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee

前端对象列表页面;文件对象管理页面后端Api;后端Api添加管理员身份验证

This commit is contained in:
2022-04-10 21:12:15 +08:00
parent 413411ddb6
commit c3139a6908
17 changed files with 326 additions and 88 deletions

View File

@@ -7,15 +7,19 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import plus.bookshelf.Common.Enum.FileStorageMediumEnum;
import plus.bookshelf.Common.Error.BusinessErrorCode;
import plus.bookshelf.Common.Error.BusinessException;
import plus.bookshelf.Common.FileManager.QCloudCosUtils;
import plus.bookshelf.Common.Response.CommonReturnType;
import plus.bookshelf.Config.QCloudCosConfig;
import plus.bookshelf.Controller.VO.FileObjectVO;
import plus.bookshelf.Controller.VO.FileVO;
import plus.bookshelf.Service.Impl.FileObjectServiceImpl;
import plus.bookshelf.Service.Impl.FileServiceImpl;
import plus.bookshelf.Service.Impl.UserServiceImpl;
import plus.bookshelf.Service.Model.FileModel;
import plus.bookshelf.Service.Model.FileObjectModel;
import plus.bookshelf.Service.Model.UserModel;
import plus.bookshelf.Service.Service.CosPresignedUrlGenerateLogService;
@@ -37,20 +41,26 @@ public class FileController extends BaseController {
@Autowired
CosPresignedUrlGenerateLogService cosPresignedUrlGenerateLogService;
@Autowired
FileServiceImpl fileService;
@Autowired
FileObjectServiceImpl fileObjectService;
@ApiOperation(value = "查询文件列表", notes = "查询文件列表")
@RequestMapping(value = "list", method = {RequestMethod.GET})
@ResponseBody
public CommonReturnType list() throws InvocationTargetException, IllegalAccessException {
List<FileModel> fileModels = fileService.list();
public CommonReturnType list(@RequestParam(value = "token", required = false) String token) throws InvocationTargetException, IllegalAccessException {
List<FileModel> fileModels = fileService.list(token);
List<FileVO> fileVOS = new ArrayList<>();
for (FileModel fileModel : fileModels) {
FileVO fileVO = convertFromModel(fileModel);
FileVO fileVO = convertFileVOFromModel(fileModel);
fileVOS.add(fileVO);
}
return CommonReturnType.create(fileVOS);
}
private FileVO convertFromModel(FileModel fileModel) {
private FileVO convertFileVOFromModel(FileModel fileModel) {
FileVO fileVO = new FileVO();
BeanUtils.copyProperties(fileModel, fileVO);
fileVO.setFileCreateAt(fileModel.getFileCreateAt().getTime());
@@ -58,6 +68,30 @@ public class FileController extends BaseController {
return fileVO;
}
@ApiOperation(value = "查询文件对象列表", notes = "查询文件列表")
@RequestMapping(value = "object/list", method = {RequestMethod.GET})
@ResponseBody
public CommonReturnType objectList(@RequestParam(value = "token", required = false) String token) throws InvocationTargetException, IllegalAccessException, BusinessException {
List<FileObjectModel> fileObjectModels = fileObjectService.list(token);
List<FileObjectVO> fileObjectVOS = new ArrayList<>();
for (FileObjectModel fileObjectModel : fileObjectModels) {
FileObjectVO fileObjectVO = convertFileObjectVOFromModel(fileObjectModel);
fileObjectVOS.add(fileObjectVO);
}
return CommonReturnType.create(fileObjectVOS);
}
private FileObjectVO convertFileObjectVOFromModel(FileObjectModel fileObjectModel) {
FileObjectVO fileObjectVO = new FileObjectVO();
BeanUtils.copyProperties(fileObjectModel, fileObjectVO);
try {
// 尝试将 FileStorageMedium 转为中文,如果没有成功,那么就保留英文
fileObjectVO.setStorageMediumType(FileStorageMediumEnum.valueOf(fileObjectModel.getStorageMediumType()).getStorageMediumDisplayName());
} catch (Exception e) {
}
return fileObjectVO;
}
/**
* 创建文件操作预授权URL
*

View File

@@ -0,0 +1,29 @@
package plus.bookshelf.Controller.VO;
import lombok.Data;
@Data
public class FileObjectVO {
// 文件存储介质Id
private Integer id;
// 存储的文件Id
private Integer fileId;
// 文件存储介质类型
String storageMediumType;
// 文件地址
// 如果是网盘就是分享链接,如果是本地存储就是文件路径
String filePath;
// 如果文件有压缩,那么就是压缩包密码
String filePwd;
// 文件提取码
String fileShareCode;
// 附加字段(JSON存储)
String additionalFields;
}

View File

@@ -13,11 +13,11 @@ public class FileObjectDO {
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column file_object_info.fileId
* This field corresponds to the database column file_object_info.file_id
*
* @mbg.generated
*/
private Integer fileid;
private Integer fileId;
/**
*
@@ -26,7 +26,7 @@ public class FileObjectDO {
*
* @mbg.generated
*/
private Byte storageMediumType;
private String storageMediumType;
/**
*
@@ -90,26 +90,26 @@ public class FileObjectDO {
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column file_object_info.fileId
* This method returns the value of the database column file_object_info.file_id
*
* @return the value of file_object_info.fileId
* @return the value of file_object_info.file_id
*
* @mbg.generated
*/
public Integer getFileid() {
return fileid;
public Integer getFileId() {
return fileId;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column file_object_info.fileId
* This method sets the value of the database column file_object_info.file_id
*
* @param fileid the value for file_object_info.fileId
* @param fileId the value for file_object_info.file_id
*
* @mbg.generated
*/
public void setFileid(Integer fileid) {
this.fileid = fileid;
public void setFileId(Integer fileId) {
this.fileId = fileId;
}
/**
@@ -120,7 +120,7 @@ public class FileObjectDO {
*
* @mbg.generated
*/
public Byte getStorageMediumType() {
public String getStorageMediumType() {
return storageMediumType;
}
@@ -132,8 +132,8 @@ public class FileObjectDO {
*
* @mbg.generated
*/
public void setStorageMediumType(Byte storageMediumType) {
this.storageMediumType = storageMediumType;
public void setStorageMediumType(String storageMediumType) {
this.storageMediumType = storageMediumType == null ? null : storageMediumType.trim();
}
/**

View File

@@ -1,6 +1,7 @@
package plus.bookshelf.Dao.Mapper;
import org.springframework.stereotype.Repository;
import plus.bookshelf.Dao.DO.FileDO;
import plus.bookshelf.Dao.DO.FileObjectDO;
@Repository // 添加这个注解Autowired的时候idea就不会报错了
@@ -51,13 +52,12 @@ public interface FileObjectDOMapper {
*
* @mbg.generated
*/
int updateByPrimaryKeyWithBLOBs(FileObjectDO record);
int updateByPrimaryKey(FileObjectDO record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table file_object_info
* 查询系统中的所有文件对象
*
* @mbg.generated
* @return
*/
int updateByPrimaryKey(FileObjectDO record);
FileObjectDO[] selectAll();
}

View File

@@ -0,0 +1,57 @@
package plus.bookshelf.Service.Impl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import plus.bookshelf.Common.Error.BusinessException;
import plus.bookshelf.Dao.DO.FileObjectDO;
import plus.bookshelf.Dao.Mapper.FileObjectDOMapper;
import plus.bookshelf.Service.Model.FileObjectModel;
import plus.bookshelf.Service.Model.UserModel;
import plus.bookshelf.Service.Service.FileObjectService;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
@Service
public class FileObjectServiceImpl implements FileObjectService {
@Autowired
FileObjectDOMapper fileObjectDOMapper;
@Autowired
RedisTemplate redisTemplate;
@Autowired
UserServiceImpl userService;
/**
* 列出所有文件对象
*
* @return
*/
@Override
public List<FileObjectModel> list(String token) throws InvocationTargetException, IllegalAccessException, BusinessException {
// 已经在 getUserByToken 方法中判断了 token 为空、不合法;用户不存在情况,此处无需再判断
UserModel userModel = userService.getUserByToken(redisTemplate, token);
FileObjectDO[] fileObjectDOS = fileObjectDOMapper.selectAll();
List<FileObjectModel> fileObjectModels = new ArrayList<>();
for (FileObjectDO fileObjectDO : fileObjectDOS) {
FileObjectModel fileObjectModel = convertFromDataObject(fileObjectDO);
fileObjectModels.add(fileObjectModel);
}
return fileObjectModels;
}
private FileObjectModel convertFromDataObject(FileObjectDO fileObjectDO) throws InvocationTargetException, IllegalAccessException {
FileObjectModel fileObjectModel = new FileObjectModel();
BeanUtils.copyProperties(fileObjectDO, fileObjectModel);
return fileObjectModel;
}
}

View File

@@ -1,11 +1,14 @@
package plus.bookshelf.Service.Impl;
import lombok.SneakyThrows;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import plus.bookshelf.Dao.DO.FileDO;
import plus.bookshelf.Dao.Mapper.FileDOMapper;
import plus.bookshelf.Service.Model.FileModel;
import plus.bookshelf.Service.Model.UserModel;
import plus.bookshelf.Service.Service.FileService;
import java.lang.reflect.InvocationTargetException;
@@ -18,13 +21,24 @@ public class FileServiceImpl implements FileService {
@Autowired
FileDOMapper fileDOMapper;
@Autowired
RedisTemplate redisTemplate;
@Autowired
UserServiceImpl userService;
/**
* 列出所有文件
*
* @return
*/
@SneakyThrows
@Override
public List<FileModel> list() throws InvocationTargetException, IllegalAccessException {
public List<FileModel> list(String token) throws InvocationTargetException, IllegalAccessException {
// 已经在 getUserByToken 方法中判断了 token 为空、不合法;用户不存在情况,此处无需再判断
UserModel userModel = userService.getUserByToken(redisTemplate, token);
FileDO[] fileDOS = fileDOMapper.selectAll();
List<FileModel> fileModels = new ArrayList<>();

View File

@@ -1,7 +1,6 @@
package plus.bookshelf.Service.Model;
import lombok.Data;
import plus.bookshelf.Common.Enum.FileStorageMediumEnum;
@Data
public class FileObjectModel {
@@ -13,7 +12,7 @@ public class FileObjectModel {
private Integer fileId;
// 文件存储介质类型
FileStorageMediumEnum storageMediumType;
String storageMediumType;
// 文件地址
// 如果是网盘就是分享链接,如果是本地存储就是文件路径
@@ -26,5 +25,5 @@ public class FileObjectModel {
String fileShareCode;
// 附加字段(JSON存储)
Object additionalFields;
String additionalFields;
}

View File

@@ -0,0 +1,16 @@
package plus.bookshelf.Service.Service;
import plus.bookshelf.Common.Error.BusinessException;
import plus.bookshelf.Service.Model.FileObjectModel;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
public interface FileObjectService {
/**
* 列出所有文件对象
*
* @return
*/
List<FileObjectModel> list(String token) throws InvocationTargetException, IllegalAccessException, BusinessException;
}

View File

@@ -11,5 +11,5 @@ public interface FileService {
*
* @return
*/
List<FileModel> list() throws InvocationTargetException, IllegalAccessException;
List<FileModel> list(String token) throws InvocationTargetException, IllegalAccessException;
}