diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/image/ImageController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/image/ImageController.java index 67f132f8..273068f2 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/image/ImageController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/image/ImageController.java @@ -132,14 +132,12 @@ public class ImageController { * 镜像上传 * * - * @param files 文件 * @return 上传结果 */ @PostMapping("/upload") @ApiOperation(value = "上传镜像文件", notes = "上传镜像tar包,返回存储路径") - public AjaxResult uploadImageFiles(@RequestParam("files") MultipartFile[] files) throws Exception { - return AjaxResult.success(this.imageService.uploadImageFiles(files)); - + public AjaxResult uploadImageFiles(@RequestParam("file") MultipartFile file) throws Exception { + return AjaxResult.success(this.imageService.uploadImageFiles(file)); } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/ModelsController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/ModelsController.java index 3d675379..db6eedfa 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/ModelsController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/ModelsController.java @@ -19,6 +19,8 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; /** * (Models)表控制层 @@ -187,9 +189,9 @@ public class ModelsController { *@param models_version_id 模型版本表主键 * @return 单条数据 */ - @GetMapping("/download/{models_version_id}") + @GetMapping("/download_model") @ApiOperation(value = "下载模型", notes = "根据模型版本表id下载模型文件。") - public ResponseEntity downloadModels(@PathVariable("models_version_id") Integer models_version_id) { + public ResponseEntity downloadModels(@RequestParam("models_version_id") Integer models_version_id) { return modelsService.downloadModels(models_version_id); } @@ -204,7 +206,6 @@ public class ModelsController { @ApiOperation(value = "下载模型压缩包", notes = "根据模型ID和版本下载所有模型文件,并打包。") public ResponseEntity downloadAllModelFiles(@RequestParam("models_id") Integer modelsId, @RequestParam("version") String version) { return modelsService.downloadAllModelFiles(modelsId, version); - } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ImageService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ImageService.java index 008bf35d..78e67ec6 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ImageService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ImageService.java @@ -8,6 +8,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.web.multipart.MultipartFile; import java.util.Collection; +import java.util.Map; /** * (Image)表服务接口 @@ -66,8 +67,15 @@ public interface ImageService { String insertImageAndVersion(ImageVo imageVo) throws Exception; + /** + * 本地上传构建镜像 + * @param imageName + * @param imageTag + * @param imageDescription + * @return + */ String createImageFromLocal(String imageName, String imageTag, String imageDescription); - String uploadImageFiles(MultipartFile[] files); + Map uploadImageFiles(MultipartFile file) throws Exception; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/MinioService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/MinioService.java index cd955477..bde70b6d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/MinioService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/MinioService.java @@ -2,7 +2,13 @@ package com.ruoyi.platform.service; import org.springframework.core.io.InputStreamResource; import org.springframework.http.ResponseEntity; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; public interface MinioService { - public ResponseEntity downloadZipFile(String bucketName , String path); + ResponseEntity downloadZipFile(String bucketName , String path); + + Map uploadFile(String bucketName, String objectName, MultipartFile file ) throws Exception; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ImageServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ImageServiceImpl.java index 3a05b5f4..f2c5f97e 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ImageServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ImageServiceImpl.java @@ -6,6 +6,7 @@ import com.ruoyi.platform.mapper.ImageDao; import com.ruoyi.platform.mapper.ImageVersionDao; import com.ruoyi.platform.service.ImageService; import com.ruoyi.platform.service.ImageVersionService; +import com.ruoyi.platform.service.MinioService; import com.ruoyi.platform.utils.FileUtil; import com.ruoyi.platform.vo.ImageVo; import com.ruoyi.system.api.model.LoginUser; @@ -43,7 +44,10 @@ public class ImageServiceImpl implements ImageService { private ImageVersionDao imageVersionDao; + @Resource + private MinioService minioService; + private String bucketName; /** * 通过ID查询单条数据 * @@ -174,56 +178,22 @@ public class ImageServiceImpl implements ImageService { } @Override - public String createImageFromLocal(String imageName, String imageTag, String imageDescription) { + public String createImageFromLocal(String imageName, String imageTag, String fileName) { + // TODO 检查环境是否存在,如果不存在,请开启容器 + + // TODO 在容器的/data/admin 目录下执行命令 docker load -i fileName 得到返回的镜像名字name:tag + + // TODO 在容器里执行 docker tag name:tag nexus3.kube-system.svc:8083/imageName:imageTag + + return null; } @Override - public String uploadImageFiles(MultipartFile[] files) { -// Map results = new HashMap(); -// -// // 验证模型是否存在 - - -// Models models = this.modelsDao.queryById(id); -// if (models == null) { -// throw new Exception("未找到模型记录"); -// } -// -// for (MultipartFile file:files){ -// if (file.isEmpty()) { -// throw new Exception("文件为空,无法上传"); -// } -// // 获取文件大小并转换为KB -// long sizeInBytes = file.getSize(); -// String formattedSize = FileUtil.formatFileSize(sizeInBytes); // 格式化文件大小 -// -// // 其余操作基于 modelsVersionToUse -// String username = SecurityUtils.getLoginUser().getUsername(); -// String fileName = file.getOriginalFilename(); -// // String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime); -// String objectName = "models/" + username + "/" + models.getName() + "/" + version + "/" + fileName; -// -// // 上传文件到MinIO并将记录新增到数据库中 -// try (InputStream inputStream = file.getInputStream()) { -// minioUtil.uploadObject(bucketName, objectName, inputStream); -// ModelsVersion modelsVersion = new ModelsVersion(); -// modelsVersion.setModelsId(id); -// modelsVersion.setVersion(version); -// modelsVersion.setUrl(objectName); -// modelsVersion.setFileName(fileName); -// modelsVersion.setFileSize(formattedSize); -// //返回插入结果 -// ModelsVersion insertedModelsVersion = modelsVersionService.insert(modelsVersion); -// Map fileResult = new HashMap<>(); -// fileResult.put("fileName", file.getOriginalFilename()); -// fileResult.put("url", objectName); // objectName根据实际情况定义 -// results.put(insertedModelsVersion.getId(), fileResult); -// } catch (Exception e) { -// throw new Exception("上传到模型失败: " + e.getMessage(), e); -// } -// } -// return results; - return null; + public Map uploadImageFiles(MultipartFile file) throws Exception { + LoginUser loginUser = SecurityUtils.getLoginUser(); + String path = loginUser.getUsername()+"/"+file.getOriginalFilename(); + Map stringMap = minioService.uploadFile(bucketName, path, file); + return stringMap; } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/MinioServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/MinioServiceImpl.java index b3eef238..82ecd068 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/MinioServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/MinioServiceImpl.java @@ -1,6 +1,8 @@ package com.ruoyi.platform.service.impl; +import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.platform.service.MinioService; +import com.ruoyi.platform.utils.FileUtil; import com.ruoyi.platform.utils.MinioUtil; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; @@ -8,12 +10,18 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.nio.file.Path; import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + @Service("MinioService") public class MinioServiceImpl implements MinioService { @@ -40,4 +48,25 @@ public class MinioServiceImpl implements MinioService { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } } + + @Override + public Map uploadFile(String bucketName, String objectName,MultipartFile file ) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件为空,无法上传"); + } + // 获取文件大小并转换为可读形式 + long sizeInBytes = file.getSize(); + String formattedSize = FileUtil.formatFileSize(sizeInBytes); // 格式化文件大小 + Map result = new HashMap<>(); + // 上传文件到MinIO并将记录新增到数据库中 + try (InputStream inputStream = file.getInputStream()){ + minioUtil.uploadObject(bucketName, objectName, inputStream); + result.put("fileName", file.getOriginalFilename()); + result.put("url", objectName); // objectName根据实际情况定义 + result.put("fileSize", formattedSize); + } catch (Exception e) { + throw new Exception("上传数据集失败: " + e.getMessage(), e); + } + return result; + } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java index ddfa39cf..c56252cf 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java @@ -179,7 +179,7 @@ public class ModelsServiceImpl implements ModelsService { public ResponseEntity downloadModels(Integer id) { ModelsVersion modelsVersion = this.modelsVersionDao.queryById(id); if (modelsVersion == null) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } // 从数据库中获取存储路径(即MinIO中的对象名称) String objectName = modelsVersion.getUrl();