From 51df6e262c2d625e700a8194cbe0ec1e40b80843 Mon Sep 17 00:00:00 2001
From: xin <1099200748@qq.com>
Date: Tue, 03 Jun 2025 19:23:31 +0800
Subject: [PATCH] 存储桶

---
 oying-tools/src/main/java/com/oying/service/impl/BucketStorageServiceImpl.java |  131 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 131 insertions(+), 0 deletions(-)

diff --git a/oying-tools/src/main/java/com/oying/service/impl/BucketStorageServiceImpl.java b/oying-tools/src/main/java/com/oying/service/impl/BucketStorageServiceImpl.java
new file mode 100644
index 0000000..8e652c7
--- /dev/null
+++ b/oying-tools/src/main/java/com/oying/service/impl/BucketStorageServiceImpl.java
@@ -0,0 +1,131 @@
+package com.oying.service.impl;
+
+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<BucketStorageMapper, BucketStorage> implements BucketStorageService {
+
+    private final BucketStorageMapper bucketStorageMapper;
+    private final ObsProperties properties;
+    private final FileProperties fileProperties;
+
+    @Override
+    public PageResult<BucketStorage> queryAll(BucketStorageQueryCriteria criteria, Page<Object> page) {
+        return PageUtil.toPage(bucketStorageMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<BucketStorage> 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 = System.currentTimeMillis() + "." + 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<Long> ids) {
+        for(Long id : ids) {
+            BucketStorage storage = bucketStorageMapper.selectById(id);
+            ObsUtils.deleteObject(properties, storage.getPath());
+        }
+        bucketStorageMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<BucketStorage> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (BucketStorage bucketStorage : all) {
+            Map<String, Object> 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);
+    }
+}

--
Gitblit v1.9.3