diff --git a/src/main/java/com/ruoyi/file/controller/SysFileController.java b/src/main/java/com/ruoyi/file/controller/SysFileController.java index e876a9e..12554b2 100644 --- a/src/main/java/com/ruoyi/file/controller/SysFileController.java +++ b/src/main/java/com/ruoyi/file/controller/SysFileController.java @@ -1,5 +1,10 @@ package com.ruoyi.file.controller; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.file.FileUtils; +import com.ruoyi.file.service.ISysFileService; +import com.ruoyi.system.api.domain.SysFile; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -7,20 +12,14 @@ import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import com.ruoyi.common.core.domain.R; -import com.ruoyi.common.core.utils.StringUtils; -import com.ruoyi.common.core.utils.file.FileUtils; -import com.ruoyi.file.service.ISysFileService; -import com.ruoyi.system.api.domain.SysFile; /** * 文件请求处理 - * + * * @author ruoyi */ @RestController -public class SysFileController -{ +public class SysFileController { private static final Logger log = LoggerFactory.getLogger(SysFileController.class); @Autowired @@ -30,19 +29,15 @@ public class SysFileController * 文件上传请求 */ @PostMapping("upload") - public R upload(MultipartFile file) - { - try - { + public R upload(MultipartFile file) { + try { // 上传并返回访问地址 String url = sysFileService.uploadFile(file); SysFile sysFile = new SysFile(); sysFile.setName(FileUtils.getName(url)); sysFile.setUrl(url); return R.ok(sysFile); - } - catch (Exception e) - { + } catch (Exception e) { log.error("上传文件失败", e); return R.fail(e.getMessage()); } @@ -52,21 +47,30 @@ public class SysFileController * 文件删除请求 */ @DeleteMapping("delete") - public R delete(String fileUrl) - { - try - { - if (!FileUtils.validateFilePath(fileUrl)) - { + public R delete(String fileUrl) { + try { + if (!FileUtils.validateFilePath(fileUrl)) { throw new Exception(StringUtils.format("资源文件({})非法,不允许删除。 ", fileUrl)); } sysFileService.deleteFile(fileUrl); return R.ok(); - } - catch (Exception e) - { + } catch (Exception e) { log.error("删除文件失败", e); return R.fail(e.getMessage()); } } + + /** + * 文件流上传请求 + */ + @PostMapping("uploadStream") + public R uploadFileByStream(String filename, String extension, String data) { + try { + + return R.ok(sysFileService.uploadFileByData(filename, extension, data)); + } catch (Exception e) { + log.error("上传文件失败", e); + return R.fail(e.getMessage()); + } + } } diff --git a/src/main/java/com/ruoyi/file/service/ISysFileService.java b/src/main/java/com/ruoyi/file/service/ISysFileService.java index 2c8fa00..9c9a4c4 100644 --- a/src/main/java/com/ruoyi/file/service/ISysFileService.java +++ b/src/main/java/com/ruoyi/file/service/ISysFileService.java @@ -2,8 +2,6 @@ package com.ruoyi.file.service; import org.springframework.web.multipart.MultipartFile; -import java.io.ByteArrayOutputStream; - /** * 文件上传接口 * @@ -36,5 +34,5 @@ public interface ISysFileService { * @param out 上传的流 * @return 访问地址 */ - String uploadFileByStream(String filename, String extension, ByteArrayOutputStream out) throws Exception; + String uploadFileByData(String filename, String extension, String out) throws Exception; } diff --git a/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java b/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java index 48e0ceb..8cb09bd 100644 --- a/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java +++ b/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java @@ -4,7 +4,7 @@ import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.file.FileUtils; import com.ruoyi.file.utils.FileUploadUtils; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Primary; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -16,8 +16,8 @@ import java.io.ByteArrayOutputStream; * * @author ruoyi */ -@Primary @Service +@ConditionalOnProperty(name = "file.storage", havingValue = "local", matchIfMissing = true) public class LocalSysFileServiceImpl implements ISysFileService { /** * 资源映射路径 前缀 @@ -71,8 +71,8 @@ public class LocalSysFileServiceImpl implements ISysFileService { * @return 访问地址 */ @Override - public String uploadFileByStream(String filename, String extension, ByteArrayOutputStream out) throws Exception { - try (ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray())) { + public String uploadFileByData(String filename, String extension, String out) throws Exception { + try (ByteArrayInputStream in = new ByteArrayInputStream(out.getBytes())) { String fileName = FileUploadUtils.extractFilename(filename, extension); return FileUploadUtils.uploadByStream(localFilePath, fileName, in); } catch (Exception e) { diff --git a/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java b/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java index 204291f..8c87d7b 100644 --- a/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java +++ b/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java @@ -8,6 +8,7 @@ import io.minio.MinioClient; import io.minio.PutObjectArgs; import io.minio.RemoveObjectArgs; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -21,6 +22,7 @@ import java.io.InputStream; * @author ruoyi */ @Service +@ConditionalOnProperty(name = "file.storage", havingValue = "minio") public class MinioSysFileServiceImpl implements ISysFileService { @Autowired private MinioConfig minioConfig; @@ -73,8 +75,8 @@ public class MinioSysFileServiceImpl implements ISysFileService { } @Override - public String uploadFileByStream(String filename, String extension, ByteArrayOutputStream out) throws Exception { - try (ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray())) { + public String uploadFileByData(String filename, String extension, String out) throws Exception { + try (ByteArrayInputStream in = new ByteArrayInputStream(out.getBytes())) { String fileName = FileUploadUtils.extractFilename(filename, extension); String contentType = FileUploadUtils.getContentType(extension); // 获取文件类型 PutObjectArgs args = PutObjectArgs.builder()