package com.oying.service.impl; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.obs.services.model.AccessControlList; import com.obs.services.model.PutObjectResult; import com.oying.config.properties.FileProperties; import com.oying.domain.BucketStorage; import com.oying.exception.BadRequestException; import com.oying.utils.*; import lombok.RequiredArgsConstructor; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.oying.service.BucketStorageService; import com.oying.domain.dto.BucketStorageQueryCriteria; import com.oying.mapper.BucketStorageMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.util.List; import java.util.Map; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.LinkedHashMap; import org.springframework.web.multipart.MultipartFile; /** * @author lixin * @description 服务实现 * @date 2025-06-03 **/ @Service @RequiredArgsConstructor public class BucketStorageServiceImpl extends ServiceImpl implements BucketStorageService { private final BucketStorageMapper bucketStorageMapper; private final ObsProperties properties; private final FileProperties fileProperties; @Override public PageResult queryAll(BucketStorageQueryCriteria criteria, Page page) { return PageUtil.toPage(bucketStorageMapper.findAll(criteria, page)); } @Override public List queryAll(BucketStorageQueryCriteria criteria) { return bucketStorageMapper.findAll(criteria); } @Override @Transactional(rollbackFor = Exception.class) public BucketStorage createFile(String name, File file) { FileUtil.checkSize(fileProperties.getMaxSize(), file.length()); String suffix = FileUtil.getExtensionName(file.getName()); String type = FileUtil.getFileType(suffix); String reaName = System.currentTimeMillis() + "." + suffix; String objectKey = type + "/" + reaName; PutObjectResult result = ObsUtils.putObject(properties, file, objectKey, AccessControlList.REST_CANNED_PUBLIC_READ); if (ObjectUtil.isNull(result)) { throw new BadRequestException("上传失败"); } name = StringUtils.isBlank(name) ? FileUtil.getFileNameNoEx(reaName) : name; BucketStorage bucketStorage = new BucketStorage( reaName, name, suffix, objectKey, type, FileUtil.getSize(file.length()) ); bucketStorageMapper.insert(bucketStorage); return bucketStorage; } @Override @Transactional(rollbackFor = Exception.class) public BucketStorage create(String name, MultipartFile file) { FileUtil.checkSize(fileProperties.getMaxSize(), file.getSize()); String suffix = FileUtil.getExtensionName(file.getOriginalFilename()); String type = FileUtil.getFileType(suffix); String reaName = IdUtil.getSnowflake(1, 1).nextId() + "." + suffix; String objectKey = type + "/" + reaName; PutObjectResult result = ObsUtils.putObject(properties, FileUtil.toFile(file), objectKey, AccessControlList.REST_CANNED_PUBLIC_READ); if (ObjectUtil.isNull(result)) { throw new BadRequestException("上传失败"); } name = StringUtils.isBlank(name) ? FileUtil.getFileNameNoEx(reaName) : name; BucketStorage bucketStorage = new BucketStorage( reaName, name, suffix, objectKey, type, FileUtil.getSize(file.getSize()) ); bucketStorageMapper.insert(bucketStorage); return bucketStorage; } @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(List ids) { for (Long id : ids) { BucketStorage storage = bucketStorageMapper.selectById(id); ObsUtils.deleteObject(properties, storage.getPath()); } bucketStorageMapper.deleteBatchIds(ids); } @Override @Transactional(rollbackFor = Exception.class) public void deleteById(String path) { BucketStorage storage = bucketStorageMapper.findByPath(path); ObsUtils.deleteObject(properties, storage.getPath()); bucketStorageMapper.deleteById(storage.getBucketId()); } @Override public void download(List all, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); for (BucketStorage bucketStorage : all) { Map map = new LinkedHashMap<>(); map.put("文件名称", bucketStorage.getRealName()); map.put("备注名称", bucketStorage.getName()); map.put("文件类型", bucketStorage.getSuffix()); map.put("文件路径", bucketStorage.getPath()); map.put("文件分类", bucketStorage.getType()); map.put("文件大小", bucketStorage.getSize()); map.put("创建人", bucketStorage.getCreateBy()); map.put("创建时间", bucketStorage.getCreateTime()); list.add(map); } FileUtil.downloadExcel(list, response); } }