maven
20 小时以前 ca77a052f3af47697cd3cf0a4f71468feb8455af
yys  巡检bug
已修改5个文件
105 ■■■■■ 文件已修改
main-business/src/main/java/com/ruoyi/business/service/impl/QrCodeScanRecordServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/basic/entity/StorageBlob.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/basic/service/StorageBlobService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main-business/src/main/java/com/ruoyi/business/service/impl/QrCodeScanRecordServiceImpl.java
@@ -135,8 +135,10 @@
                                Optional.ofNullable(blobMap.get(att.getStorageBlobId()))
                                        .ifPresent(blob -> {
                                            BeanUtils.copyProperties(blob, blobDTO);
                                            blobDTO.setUrl(minioUtils.getPreviewUrls(blob.getBucketFilename(), blob.getBucketName(), true));
                                            blobDTO.setDownloadUrl(minioUtils.getDownloadUrls(blob.getBucketFilename(),blob.getBucketName(),blob.getOriginalFilename(),true));
//                                            blobDTO.setUrl(minioUtils.getPreviewUrls(blob.getBucketFilename(), blob.getBucketName(), true));
//                                            blobDTO.setDownloadUrl(minioUtils.getDownloadUrls(blob.getBucketFilename(),blob.getBucketName(),blob.getOriginalFilename(),true));
                                            blobDTO.setUrl(blob.getFileUrl());
                                            blobDTO.setDownloadUrl(blob.getFileUrl());
                                        });
                                return blobDTO;
                            })
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -148,6 +148,15 @@
    }
    /**
     * 文件上传通用上传请求(多个)
     */
    @PostMapping("/commonUploads")
    public R uploads(List<MultipartFile> files, String bucketName,Long type) throws Exception
    {
        return R.ok(storageBlobService.uploads(files, bucketName,type));
    }
    /**
     * 本地资源通用下载
     */
    @GetMapping("/download/resource")
ruoyi-common/src/main/java/com/ruoyi/basic/entity/StorageBlob.java
@@ -70,4 +70,7 @@
     */
    @TableField(value = "type")
    private Long type;
    @TableField(value = "file_url")
    private String fileUrl;
}
ruoyi-common/src/main/java/com/ruoyi/basic/service/StorageBlobService.java
@@ -32,4 +32,6 @@
     * @return
     */
    public int deleteStorageBlobs(StorageAttachment attachment);
    List<StorageBlobDTO> uploads(List<MultipartFile> files, String bucketName, Long type);
}
ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java
@@ -17,13 +17,21 @@
import com.ruoyi.common.utils.uuid.IdUtils;
import lombok.RequiredArgsConstructor;
import org.apache.commons.io.FilenameUtils;
import org.apache.poi.util.TempFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/**
@@ -46,6 +54,36 @@
    @Autowired
    private MinioUtils minioUtils;
    @Value("${file.file-url}")
    private String fileUrl;
    @Override
    public List<StorageBlobDTO> uploads(List<MultipartFile> files, String bucketName, Long type) {
        // 若没传入bucketName,则使用默认bucketName
        if (StringUtils.isEmpty(bucketName)) {
            bucketName = minioUtils.getDefaultBucket();
        }
        List<StorageBlobDTO> storageBlobDTOs = new ArrayList<>();
        for (MultipartFile file : files) {
            try {
                validateFileExtension(file);
//                MinioResult res = minioUtils.upload(bucketName, file, false);
                // 不使用minio,使用本地文件上传
                String res = uploadFile(file, type);
                StorageBlobDTO dto = buildStorageBlobDTO(file, res, bucketName, type);
                dto.setFileUrl(res);
                storageBlobMapper.insert(dto);
                storageBlobDTOs.add(dto);
            } catch (InvalidExtensionException e) {
                throw new RuntimeException("不支持的文件类型:" + file.getOriginalFilename(), e);
            } catch (Exception e) {
                throw new RuntimeException("上传文件失败:" + file.getOriginalFilename(), e);
            }
        }
        return storageBlobDTOs;
    }
    @Override
    public List<StorageBlobDTO> updateStorageBlobs(List<MultipartFile> files, String bucketName,Long type) {
@@ -57,9 +95,8 @@
        for (MultipartFile file : files) {
            try {
                validateFileExtension(file);
                MinioResult res = minioUtils.upload(bucketName, file, false);
//                String res = uploadFile(file, type);
                StorageBlobDTO dto = buildStorageBlobDTO(file, res, bucketName, type);
                storageBlobMapper.insert(dto);
@@ -72,6 +109,30 @@
            }
        }
        return storageBlobDTOs;
    }
    @Value("${file.upload-dir}")
    private String tempDir;
    public String uploadFile(MultipartFile file, Long type) throws IOException {
        // 1. 生成临时文件ID和路径
        String tempId = UUID.randomUUID().toString();
        String originalFilename = file.getOriginalFilename();
        if(originalFilename == null) throw new IOException("文件名不能为空");
        Path tempFilePath = Paths.get(tempDir, tempId + "_" + file.getOriginalFilename()); //windows上传路径
        Path prodFilePath = Paths.get(fileUrl, tempId + "_" + file.getOriginalFilename()); //nginx代理路径
        // 2. 确保目录存在
        Path parentDir = tempFilePath.getParent();
        if (parentDir != null) {
            Files.createDirectories(parentDir); // 递归创建目录
        }
        // 3. 保存文件到临时目录
        file.transferTo(tempFilePath.toFile());
        return prodFilePath.toString();
    }
    private void validateFileExtension(MultipartFile file) throws InvalidExtensionException {
@@ -126,6 +187,24 @@
        return dto;
    }
    private StorageBlobDTO buildStorageBlobDTO(MultipartFile file, String res, String bucketName, Long type) {
        StorageBlobDTO dto = new StorageBlobDTO();
        dto.setContentType(file.getContentType());
        dto.setBucketFilename("sys");
        dto.setOriginalFilename(file.getOriginalFilename());
        dto.setByteSize(file.getSize());
        dto.setKey(IdUtils.simpleUUID());
        dto.setBucketName(bucketName);
        dto.setUrl(res);
        dto.setDownloadUrl(res);
        if (type != null) {
            dto.setType(type);
        }
        return dto;
    }
    @Override
    public int deleteStorageBlobs(StorageAttachment attachment) {
        List<StorageAttachment> attachments = storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>()
@@ -158,4 +237,6 @@
        }
        return 0;
    }
}