package com.oying.service.impl; import cn.hutool.core.util.ObjectUtil; import com.obs.services.internal.ObsProperties; import com.obs.services.model.AccessControlList; import com.obs.services.model.PutObjectResult; import com.oying.domain.BucketStorage; import com.oying.utils.FileUtil; 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 com.oying.utils.PageUtil; 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 com.oying.utils.PageResult; import org.springframework.web.multipart.MultipartFile; /** * @description 服务实现 * @author lixin * @date 2025-06-03 **/ @Service @RequiredArgsConstructor public class BucketStorageServiceImpl extends ServiceImpl implements BucketStorageService { private final BucketStorageMapper bucketStorageMapper; private final ObsProperties @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) { ObsConfig config = obsConfigService.findById(1L); FileUtil.checkSize(properties.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(config, 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()) ); return bucketStorageRepository.save(bucketStorage); } @Override @Transactional(rollbackFor = Exception.class) public BucketStorage create(String name, MultipartFile file) { FileUtil.checkSize(properties.getMaxSize(), file.getSize()); String suffix = FileUtil.getExtensionName(file.getOriginalFilename()); String type = FileUtil.getFileType(suffix); String reaName = System.currentTimeMillis() + "." + suffix; String objectKey = type + "/" + reaName; PutObjectResult result = ObsUtils.putObject(config, 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()) ); return bucketStorageRepository.save(bucketStorage); } @Override @Transactional(rollbackFor = Exception.class) public void update(BucketStorage resources) { BucketStorage bucketStorage = getById(resources.getBucketId()); bucketStorage.copy(resources); bucketStorageMapper.updateById(bucketStorage); } @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(List ids) { bucketStorageMapper.deleteBatchIds(ids); } @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()); map.put("修改者", bucketStorage.getUpdateBy()); map.put("修改时间", bucketStorage.getUpdateTime()); list.add(map); } FileUtil.downloadExcel(list, response); } }