mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 15:55:18 +08:00
文件服务
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
package cn.lihongjie.coal.file.controller;
|
||||
|
||||
import cn.lihongjie.coal.annotation.OrgScope;
|
||||
import cn.lihongjie.coal.annotation.SysLog;
|
||||
import cn.lihongjie.coal.base.dto.CommonQuery;
|
||||
import cn.lihongjie.coal.base.dto.IdRequest;
|
||||
import cn.lihongjie.coal.file.dto.CreateFileDto;
|
||||
import cn.lihongjie.coal.file.dto.FileDto;
|
||||
import cn.lihongjie.coal.file.dto.UpdateFileDto;
|
||||
import cn.lihongjie.coal.file.service.FileService;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/file")
|
||||
@SysLog(module = "文件管理")
|
||||
@Slf4j
|
||||
@OrgScope
|
||||
public class FileController {
|
||||
@Autowired private FileService service;
|
||||
|
||||
@PostMapping("/create")
|
||||
public FileDto create(@RequestBody CreateFileDto request) {
|
||||
return this.service.create(request);
|
||||
}
|
||||
|
||||
@PostMapping("/upload")
|
||||
public FileDto upload(
|
||||
@RequestParam("file") MultipartFile file,
|
||||
@RequestParam("name") String name,
|
||||
@RequestParam("dir") String dir) {
|
||||
return this.service.upload(file, name, dir);
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public FileDto update(@RequestBody UpdateFileDto request) {
|
||||
return this.service.update(request);
|
||||
}
|
||||
|
||||
@PostMapping("/delete")
|
||||
public Object delete(@RequestBody IdRequest request) {
|
||||
this.service.delete(request);
|
||||
return true;
|
||||
}
|
||||
|
||||
@PostMapping("/getById")
|
||||
public FileDto getById(@RequestBody String request) {
|
||||
return this.service.getById(request);
|
||||
}
|
||||
|
||||
@PostMapping("/list")
|
||||
public Page<FileDto> list(@RequestBody CommonQuery request) {
|
||||
return this.service.list(request);
|
||||
}
|
||||
}
|
||||
28
src/main/java/cn/lihongjie/coal/file/dto/CreateFileDto.java
Normal file
28
src/main/java/cn/lihongjie/coal/file/dto/CreateFileDto.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package cn.lihongjie.coal.file.dto;
|
||||
|
||||
import cn.lihongjie.coal.base.dto.OrgCommonDto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.hibernate.annotations.Comment;
|
||||
|
||||
@Data
|
||||
public class CreateFileDto extends OrgCommonDto {
|
||||
@Comment("文件目录")
|
||||
private String directory;
|
||||
|
||||
@Comment("文件名称")
|
||||
private String fileName;
|
||||
|
||||
@Comment("文件mime")
|
||||
private String mimeType;
|
||||
|
||||
@Comment("文件大小")
|
||||
private Long fileSize;
|
||||
|
||||
@Comment("互联网访问地址")
|
||||
private String publicUrl;
|
||||
|
||||
@Comment("局域网访问地址")
|
||||
private String privateUrl;
|
||||
}
|
||||
28
src/main/java/cn/lihongjie/coal/file/dto/FileDto.java
Normal file
28
src/main/java/cn/lihongjie/coal/file/dto/FileDto.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package cn.lihongjie.coal.file.dto;
|
||||
|
||||
import cn.lihongjie.coal.base.dto.OrgCommonDto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.hibernate.annotations.Comment;
|
||||
|
||||
@Data
|
||||
public class FileDto extends OrgCommonDto {
|
||||
@Comment("文件目录")
|
||||
private String directory;
|
||||
|
||||
@Comment("文件名称")
|
||||
private String fileName;
|
||||
|
||||
@Comment("文件mime")
|
||||
private String mimeType;
|
||||
|
||||
@Comment("文件大小")
|
||||
private Long fileSize;
|
||||
|
||||
@Comment("互联网访问地址")
|
||||
private String publicUrl;
|
||||
|
||||
@Comment("局域网访问地址")
|
||||
private String privateUrl;
|
||||
}
|
||||
28
src/main/java/cn/lihongjie/coal/file/dto/UpdateFileDto.java
Normal file
28
src/main/java/cn/lihongjie/coal/file/dto/UpdateFileDto.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package cn.lihongjie.coal.file.dto;
|
||||
|
||||
import cn.lihongjie.coal.base.dto.OrgCommonDto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.hibernate.annotations.Comment;
|
||||
|
||||
@Data
|
||||
public class UpdateFileDto extends OrgCommonDto {
|
||||
@Comment("文件目录")
|
||||
private String directory;
|
||||
|
||||
@Comment("文件名称")
|
||||
private String fileName;
|
||||
|
||||
@Comment("文件mime")
|
||||
private String mimeType;
|
||||
|
||||
@Comment("文件大小")
|
||||
private Long fileSize;
|
||||
|
||||
@Comment("互联网访问地址")
|
||||
private String publicUrl;
|
||||
|
||||
@Comment("局域网访问地址")
|
||||
private String privateUrl;
|
||||
}
|
||||
35
src/main/java/cn/lihongjie/coal/file/entity/FileEntity.java
Normal file
35
src/main/java/cn/lihongjie/coal/file/entity/FileEntity.java
Normal file
@@ -0,0 +1,35 @@
|
||||
package cn.lihongjie.coal.file.entity;
|
||||
|
||||
import cn.lihongjie.coal.base.entity.OrgCommonEntity;
|
||||
|
||||
import jakarta.persistence.Entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.hibernate.annotations.Comment;
|
||||
|
||||
@Data
|
||||
@Entity
|
||||
public class FileEntity extends OrgCommonEntity {
|
||||
|
||||
@Comment("文件目录")
|
||||
private String directory;
|
||||
|
||||
@Comment("文件名称")
|
||||
private String fileName;
|
||||
|
||||
@Comment("文件mime")
|
||||
private String mimeType;
|
||||
|
||||
@Comment("文件大小")
|
||||
private Long fileSize;
|
||||
|
||||
@Comment("互联网访问地址")
|
||||
private String publicUrl;
|
||||
|
||||
@Comment("局域网访问地址")
|
||||
private String privateUrl;
|
||||
|
||||
@Comment("对象ID")
|
||||
private String objectId;
|
||||
}
|
||||
16
src/main/java/cn/lihongjie/coal/file/mapper/FileMapper.java
Normal file
16
src/main/java/cn/lihongjie/coal/file/mapper/FileMapper.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package cn.lihongjie.coal.file.mapper;
|
||||
|
||||
import cn.lihongjie.coal.base.mapper.BaseMapper;
|
||||
import cn.lihongjie.coal.base.mapper.CommonMapper;
|
||||
import cn.lihongjie.coal.file.dto.CreateFileDto;
|
||||
import cn.lihongjie.coal.file.dto.FileDto;
|
||||
import cn.lihongjie.coal.file.dto.UpdateFileDto;
|
||||
import cn.lihongjie.coal.file.entity.FileEntity;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.control.DeepClone;
|
||||
|
||||
@Mapper(
|
||||
componentModel = org.mapstruct.MappingConstants.ComponentModel.SPRING,
|
||||
uses = {CommonMapper.class},
|
||||
mappingControl = DeepClone.class)
|
||||
public interface FileMapper extends BaseMapper<FileEntity, FileDto, CreateFileDto, UpdateFileDto> {}
|
||||
@@ -0,0 +1,9 @@
|
||||
package cn.lihongjie.coal.file.repository;
|
||||
|
||||
import cn.lihongjie.coal.base.dao.BaseRepository;
|
||||
import cn.lihongjie.coal.file.entity.FileEntity;
|
||||
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface FileRepository extends BaseRepository<FileEntity> {}
|
||||
123
src/main/java/cn/lihongjie/coal/file/service/FileService.java
Normal file
123
src/main/java/cn/lihongjie/coal/file/service/FileService.java
Normal file
@@ -0,0 +1,123 @@
|
||||
package cn.lihongjie.coal.file.service;
|
||||
|
||||
import cn.lihongjie.coal.base.dto.CommonQuery;
|
||||
import cn.lihongjie.coal.base.dto.IdRequest;
|
||||
import cn.lihongjie.coal.base.service.BaseService;
|
||||
import cn.lihongjie.coal.common.Ctx;
|
||||
import cn.lihongjie.coal.exception.BizException;
|
||||
import cn.lihongjie.coal.file.dto.CreateFileDto;
|
||||
import cn.lihongjie.coal.file.dto.FileDto;
|
||||
import cn.lihongjie.coal.file.dto.UpdateFileDto;
|
||||
import cn.lihongjie.coal.file.entity.FileEntity;
|
||||
import cn.lihongjie.coal.file.mapper.FileMapper;
|
||||
import cn.lihongjie.coal.file.repository.FileRepository;
|
||||
import cn.lihongjie.coal.spring.config.HwCloudProperty;
|
||||
|
||||
import com.obs.services.ObsClient;
|
||||
import com.obs.services.model.PutObjectResult;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.tika.Tika;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.UUID;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class FileService extends BaseService<FileEntity, FileRepository> {
|
||||
@Autowired ObsClient obsClient;
|
||||
@Autowired HwCloudProperty hwCloudProperty;
|
||||
@Autowired private FileRepository repository;
|
||||
@Autowired private FileMapper mapper;
|
||||
@Autowired private ConversionService conversionService;
|
||||
private final Tika tika = new Tika();
|
||||
@Value("${spring.profiles.active}")
|
||||
private String activateProfile;
|
||||
|
||||
public FileDto create(CreateFileDto request) {
|
||||
FileEntity entity = mapper.toEntity(request);
|
||||
|
||||
this.repository.save(entity);
|
||||
return getById(entity.getId());
|
||||
}
|
||||
|
||||
public FileDto update(UpdateFileDto request) {
|
||||
FileEntity entity = this.repository.get(request.getId());
|
||||
this.mapper.updateEntity(entity, request);
|
||||
|
||||
this.repository.save(entity);
|
||||
|
||||
return getById(entity.getId());
|
||||
}
|
||||
|
||||
public void delete(IdRequest request) {
|
||||
this.repository.deleteAllById(request.getIds());
|
||||
}
|
||||
|
||||
public FileDto getById(String id) {
|
||||
FileEntity entity = repository.get(id);
|
||||
|
||||
return mapper.toDto(entity);
|
||||
}
|
||||
|
||||
public Page<FileDto> list(CommonQuery query) {
|
||||
Page<FileEntity> page =
|
||||
repository.findAll(
|
||||
query.specification(conversionService),
|
||||
PageRequest.of(
|
||||
query.getPageNo(),
|
||||
query.getPageSize(),
|
||||
Sort.by(query.getOrders())));
|
||||
|
||||
return page.map(this.mapper::toDto);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public FileDto upload(MultipartFile file, String name, String dir) {
|
||||
FileEntity fileEntity = new FileEntity();
|
||||
fileEntity.setFileName(name);
|
||||
fileEntity.setFileSize(file.getSize());
|
||||
fileEntity.setDirectory(
|
||||
"%s/%s/%s"
|
||||
.formatted(
|
||||
activateProfile,
|
||||
Ctx.currentUser().getOrganizationId(),
|
||||
StringUtils.defaultIfBlank(dir, "public")));
|
||||
InputStream inputStream = file.getInputStream();
|
||||
fileEntity.setObjectId(
|
||||
UUID.randomUUID() + "." + FilenameUtils.getExtension(name));
|
||||
try (inputStream) {
|
||||
fileEntity.setMimeType(tika.detect(inputStream));
|
||||
}
|
||||
|
||||
PutObjectResult putObjectResult =
|
||||
obsClient.putObject(
|
||||
hwCloudProperty.getObs().getBucketName(),
|
||||
fileEntity.getDirectory() + "/" + fileEntity.getObjectId(),
|
||||
file.getInputStream());
|
||||
|
||||
if (putObjectResult.getStatusCode() != 200) {
|
||||
throw new BizException("上传文件失败 %s".formatted(putObjectResult.toString()));
|
||||
}
|
||||
|
||||
String objectUrl = putObjectResult.getObjectUrl();
|
||||
|
||||
fileEntity.setPublicUrl(objectUrl);
|
||||
|
||||
this.save(fileEntity);
|
||||
|
||||
return getById(fileEntity.getId());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user