mirror of
https://gitee.com/bookshelfplus/bookshelfplus
synced 2025-09-01 22:53:29 +08:00
前端对象列表页面;文件对象管理页面后端Api;后端Api添加管理员身份验证
This commit is contained in:
@@ -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
|
||||
*
|
||||
|
@@ -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;
|
||||
}
|
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -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();
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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<>();
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
@@ -11,5 +11,5 @@ public interface FileService {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<FileModel> list() throws InvocationTargetException, IllegalAccessException;
|
||||
List<FileModel> list(String token) throws InvocationTargetException, IllegalAccessException;
|
||||
}
|
||||
|
Reference in New Issue
Block a user