qirong
2023-11-22 762167f3b4248055fc020277af1bd5724e29fec0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
@@ -3,10 +3,15 @@
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.therapi.runtimejavadoc.repack.com.eclipsesource.json.Json;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.OssService;
import org.dromara.common.core.utils.MapstructUtils;
@@ -17,9 +22,11 @@
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.entity.SynchronousRequest;
import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.enumd.AccessPolicyType;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysOss;
import org.dromara.system.domain.bo.SysOssBo;
import org.dromara.system.domain.vo.SysOssVo;
@@ -27,6 +34,8 @@
import org.dromara.system.service.ISysOssService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.system.uitil.HttpUtils;
import org.dromara.system.uitil.PasswordUtil;
import org.jetbrains.annotations.NotNull;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.http.MediaType;
@@ -85,6 +94,7 @@
    private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery();
        lqw.select(SysOss.class,x->get(x.getColumn()));
        lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOss::getFileName, bo.getFileName());
        lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName());
        lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix());
@@ -93,8 +103,15 @@
            SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
        lqw.eq(ObjectUtil.isNotNull(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy());
        lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService());
        lqw.orderByAsc(SysOss::getOssId);
        lqw.orderByDesc(SysOss::getCreateTime);
        return lqw;
    }
    public boolean get(String str){
        if(str.equals("password") || str.equals("url") || str.equals("file_name")){
            return false;
        }
        return true;
    }
    @Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId")
@@ -122,7 +139,7 @@
    }
    @Override
    public SysOssVo upload(MultipartFile file) {
    public SysOssVo upload(MultipartFile file) throws IOException {
        String originalfileName = file.getOriginalFilename();
        String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
        OssClient storage = OssFactory.instance();
@@ -133,34 +150,98 @@
            throw new ServiceException(e.getMessage());
        }
        // 保存文件信息
        return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
        return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult, file);
    }
    /**
     * 同步
     * @param
     * @param
     * @return
     */
    @Override
    public SysOssVo upload(File file) {
        String originalfileName = file.getName();
    public SysOssVo upload2(SynchronousRequest request) {
        String originalfileName = request.getFile().getOriginalFilename();
        String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
        OssClient storage = OssFactory.instance();
        UploadResult uploadResult = storage.uploadSuffix(file, suffix);
        UploadResult uploadResult;
        try {
            uploadResult = storage.uploadSuffix2(request.getFile().getBytes(), request.getPath(), request.getFile().getContentType());
        } catch (IOException e) {
            throw new ServiceException(e.getMessage());
        }
        // 保存文件信息
        return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
        return buildResultEntity2(originalfileName, suffix, storage.getConfigKey(), uploadResult,request.getOssId(),
            request.getPassword(), request.getCreateBy());
    }
//    @Override
//    public SysOssVo upload(File file) {
//        String originalfileName = file.getName();
//        String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
//        OssClient storage = OssFactory.instance();
//        UploadResult uploadResult = storage.uploadSuffix(file, suffix);
//        // 保存文件信息
//        return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
//    }
    @NotNull
    private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult) {
    private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult, MultipartFile file) throws IOException {
        SysOss oss = new SysOss();
        oss.setUrl(uploadResult.getUrl());
        oss.setFileSuffix(suffix);
        oss.setFileName(uploadResult.getFilename());
        oss.setOriginalName(originalfileName);
        oss.setService(configKey);
        oss.setPassword(PasswordUtil.randomPassword(6));
        baseMapper.insert(oss);
        //拼接同步信息
        SynchronousRequest request = new SynchronousRequest();
        request.setFile(file);
        request.setPath(uploadResult.getFilename() + "123");
//        request.setCreateTime(new Date());
        request.setPassword(oss.getPassword());
        request.setCreateBy(String.valueOf(oss.getCreateBy()));
        request.setOssId(String.valueOf(oss.getOssId()));
        post(request);
        SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
        return this.matchingUrl(sysOssVo);
    }
    /**
     * 同步
     * @param originalfileName
     * @param suffix
     * @param configKey
     * @param uploadResult
     * @param ossId
     * @param password
//     * @param createTime
     * @param createBy
     * @return
     */
    @NotNull
    private SysOssVo buildResultEntity2(String originalfileName, String suffix, String configKey,
                                        UploadResult uploadResult, String ossId, String password,
                                         String createBy) {
        SysOss oss = new SysOss();
        oss.setOssId(Long.valueOf(ossId));
        oss.setUrl(uploadResult.getUrl());
        oss.setFileSuffix(suffix);
        oss.setFileName(uploadResult.getFilename());
        oss.setOriginalName(originalfileName);
        oss.setService(configKey);
        oss.setPassword(password);
        oss.setCreateTime(new Date());
        oss.setCreateBy(Long.valueOf(createBy));
        baseMapper.insert(oss);
        SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
        return this.matchingUrl(sysOssVo);
    }
    @Override
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid, String password) throws Exception {
        if (isValid) {
            // 做一些业务上的校验,判断是否需要校验
        }
@@ -168,8 +249,27 @@
        for (SysOss sysOss : list) {
            OssClient storage = OssFactory.instance(sysOss.getService());
            storage.delete(sysOss.getUrl());
            if(sysOss.getPassword().equals(password)){
                baseMapper.deleteById(sysOss.getOssId());
                HttpUtils.sendDeleteRequest("http://192.168.3.43/resource/oss",String.valueOf(sysOss.getOssId()));
                return true;
            }
            return false;
        }
        return baseMapper.deleteBatchIds(ids) > 0;
        return true;
    }
    @Override
    public R viewPasswordById(Long ossId) {
        LoginUser loginUser = LoginHelper.getLoginUser();
        SysOss oss = baseMapper.selectById(ossId);
        if(oss == null){
            return R.fail("文件已被清理,请联系管理员!");
        }
        if(!oss.getCreateBy().equals(loginUser.getUserId())){
            return R.fail("您没有权限查看!");
        }
        return R.ok(oss.getPassword());
    }
    /**
@@ -186,4 +286,24 @@
        }
        return oss;
    }
    private String post(SynchronousRequest request) throws IOException {
        HashMap<String, String> headers = new HashMap<>(3);
        String requestUrl = "http://192.168.3.43:8080/resource/oss/synchronization";
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = "";
        try {
            // 将Java对象转换为JSON字符串
            jsonString = objectMapper.writeValueAsString(request);
            System.out.println(jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
        headers.put("content-type", "application/json");
        // 发送post请求
        String resultData = HttpUtils.sendPostRequest(requestUrl, request);
        // 并接收返回结果
        System.out.println(resultData);
        return resultData;
    }
}