package com.ruoyi.basic.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.ruoyi.basic.entity.StorageAttachment;
|
import com.ruoyi.basic.entity.StorageBlob;
|
import com.ruoyi.basic.entity.dto.StorageBlobDTO;
|
import com.ruoyi.basic.mapper.StorageAttachmentMapper;
|
import com.ruoyi.basic.mapper.StorageBlobMapper;
|
import com.ruoyi.basic.service.StorageBlobService;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.config.MinioConfig;
|
import com.ruoyi.common.constant.Constants;
|
import com.ruoyi.common.core.domain.MinioResult;
|
import com.ruoyi.common.exception.file.InvalidExtensionException;
|
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.file.MinioUtils;
|
import com.ruoyi.common.utils.uuid.IdUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* <p>
|
* 通用文件上传的附件信息 服务实现类
|
* </p>
|
*
|
* @author ruoyi
|
* @since 2025-05-29
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class StorageBlobServiceImpl extends ServiceImpl<StorageBlobMapper, StorageBlob> implements StorageBlobService {
|
@Autowired
|
private StorageAttachmentMapper storageAttachmentMapper;
|
|
@Autowired
|
private StorageBlobMapper storageBlobMapper;
|
|
@Autowired
|
private MinioUtils minioUtils;
|
|
@Override
|
public List<StorageBlobDTO> updateStorageBlobs(List<MultipartFile> files, String bucketName) {
|
|
// 若没传入bucketName,则使用默认bucketName
|
if (StringUtils.isEmpty(bucketName)) {
|
bucketName = minioUtils.getDefaultBucket();
|
}
|
|
List<StorageBlobDTO> storageBlobDTOs = new ArrayList<>();
|
for (MultipartFile file : files) {
|
try {
|
MinioResult res = minioUtils.upload(bucketName, file, false);
|
StorageBlobDTO dto = new StorageBlobDTO();
|
dto.setContentType(file.getContentType());
|
dto.setBucketFilename(res.getBucketFileName());
|
dto.setOriginalFilename(res.getOriginalName());
|
dto.setByteSize(file.getSize());
|
dto.setKey(IdUtils.simpleUUID());
|
dto.setBucketName(bucketName);
|
dto.setCreateTime(DateUtils.getNowDate());
|
dto.setUrl(minioUtils.getPreviewUrl(res.getBucketFileName(), bucketName, false));
|
// 插入数据库
|
storageBlobMapper.insert(dto);
|
|
storageBlobDTOs.add(dto);
|
} catch (InvalidExtensionException e) {
|
throw new RuntimeException("minio文件上传异常:" + e);
|
}
|
}
|
|
|
return storageBlobDTOs;
|
}
|
|
@Override
|
public int deleteStorageBlobs(StorageAttachment attachment) {
|
List<StorageAttachment> attachments = storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>()
|
.eq(StorageAttachment::getRecordId, attachment.getRecordId())
|
.eq(StorageAttachment::getRecordType, attachment.getRecordType())
|
.eq(StorageAttachment::getName, attachment.getName()));
|
List<Long> ids = attachments.stream().map(StorageAttachment::getStorageBlobId).toList();
|
List<StorageBlob> storageBlobs = storageBlobMapper.selectList(new LambdaQueryWrapper<StorageBlob>()
|
.in(StorageBlob::getId, ids));
|
if (!storageBlobs.isEmpty()) {
|
for (StorageBlob storageBlob : storageBlobs) {
|
// 移除桶内文件
|
minioUtils.removeObjectsResult(storageBlob.getBucketName(), storageBlob.getBucketName());
|
}
|
}
|
|
if (!ids.isEmpty()) {
|
return storageBlobMapper.delete(new QueryWrapper<StorageBlob>().lambda().in(StorageBlob::getId, ids));
|
}
|
|
return 0;
|
}
|
}
|