diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/dataset/DatasetVersionController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/dataset/DatasetVersionController.java index 71be192e..87715d5d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/dataset/DatasetVersionController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/dataset/DatasetVersionController.java @@ -4,7 +4,7 @@ import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.GenericsAjaxResult; import com.ruoyi.platform.domain.DatasetVersion; import com.ruoyi.platform.service.DatasetVersionService; -import com.ruoyi.platform.vo.LabelDatasetVersion; +import com.ruoyi.platform.vo.LabelDatasetVersionVo; import io.swagger.annotations.ApiOperation; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -138,8 +138,10 @@ public class DatasetVersionController extends BaseController { @PostMapping("/addDatasetVersionsFromLabel") @ApiOperation("从数据标注添加数据集版本") - public GenericsAjaxResult addDatasetVersionsFromLabel(@RequestBody LabelDatasetVersion labelDatasetVersion) throws Exception { - return genericsSuccess(true); + public GenericsAjaxResult addDatasetVersionsFromLabel(@RequestBody LabelDatasetVersionVo labelDatasetVersionVo) throws Exception { + datasetVersionService.addDatasetVersionsFromLabel(labelDatasetVersionVo); + + return GenericsAjaxResult.success(); } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DatasetVersionService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DatasetVersionService.java index 59032c6b..3ae08ca3 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DatasetVersionService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DatasetVersionService.java @@ -1,11 +1,8 @@ package com.ruoyi.platform.service; - - -import com.ruoyi.platform.domain.Dataset; import com.ruoyi.platform.domain.DatasetVersion; -import com.ruoyi.platform.vo.LabelDatasetVersion; +import com.ruoyi.platform.vo.LabelDatasetVersionVo; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -75,5 +72,6 @@ public interface DatasetVersionService { String addDatasetVersions(List datasetVersions) throws Exception; - void addDatasetVersionsFromLabel(LabelDatasetVersion labelDatasetVersion) throws Exception; + void + addDatasetVersionsFromLabel(LabelDatasetVersionVo labelDatasetVersionVo) 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 28cb0a79..3b990a86 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 @@ -4,6 +4,7 @@ import org.springframework.core.io.InputStreamResource; import org.springframework.http.ResponseEntity; import org.springframework.web.multipart.MultipartFile; +import java.io.InputStream; import java.util.List; import java.util.Map; @@ -11,5 +12,5 @@ public interface MinioService { ResponseEntity downloadZipFile(String bucketName , String path); Map uploadFile(String bucketName, String objectName, MultipartFile file ) throws Exception; - + void uploaInputStream(String bucketName, String objectName, InputStream inputStream ) throws Exception; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java index 58487bd8..2482481d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java @@ -18,6 +18,7 @@ import com.ruoyi.platform.vo.DatasetVo; import com.ruoyi.system.api.model.LoginUser; import io.minio.messages.Item; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.InputStreamResource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -62,7 +63,8 @@ public class DatasetServiceImpl implements DatasetService { private MinioService minioService; // 固定存储桶名 - private final String bucketName = "platform-data"; + @Value("${minio.dataReleaseBucketName}") + private String bucketName; @Resource private MinioUtil minioUtil; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetVersionServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetVersionServiceImpl.java index 0fa1d0be..68d85837 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetVersionServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetVersionServiceImpl.java @@ -1,17 +1,20 @@ package com.ruoyi.platform.service.impl; +import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.platform.annotations.CheckDuplicate; import com.ruoyi.platform.domain.Dataset; import com.ruoyi.platform.domain.DatasetVersion; -import com.ruoyi.platform.domain.ModelsVersion; -import com.ruoyi.platform.domain.Workflow; +import com.ruoyi.platform.mapper.DatasetDao; import com.ruoyi.platform.mapper.DatasetVersionDao; import com.ruoyi.platform.service.DatasetVersionService; +import com.ruoyi.platform.service.MinioService; +import com.ruoyi.platform.utils.FileUtil; import com.ruoyi.platform.utils.HttpUtils; -import com.ruoyi.platform.vo.LabelDatasetVersion; +import com.ruoyi.platform.vo.LabelDatasetVersionVo; import com.ruoyi.system.api.model.LoginUser; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; @@ -35,9 +38,13 @@ import java.util.Map; public class DatasetVersionServiceImpl implements DatasetVersionService { @Resource private DatasetVersionDao datasetVersionDao; + @Resource + private DatasetDao datasetDao; // 固定存储桶名 - private final String bucketName = "platform-data"; - + @Value("${minio.dataReleaseBucketName}") + private String bucketName; + @Resource + private MinioService minioService; /** * 通过ID查询单条数据 * @@ -198,12 +205,31 @@ public class DatasetVersionServiceImpl implements DatasetVersionService { } @Override - public void addDatasetVersionsFromLabel(LabelDatasetVersion labelDatasetVersion) throws Exception{ + public void addDatasetVersionsFromLabel(LabelDatasetVersionVo labelDatasetVersionVo) throws Exception{ + Dataset dataset = datasetDao.queryById(labelDatasetVersionVo.getDataset_id()); + if (dataset == null){ + throw new Exception("数据集不存在"); + } // 获取label-studio数据流 - InputStream inputStream = HttpUtils.getInputStream("http://127.0.0.1:8080/api/projects/"+labelDatasetVersion.getProject_id()+"/export?exportType="+labelDatasetVersion.getExportType(), labelDatasetVersion.getToken()); - // 上传镜像至minio - + Map headers = new HashMap(); + headers.put("Authorization","Token "+labelDatasetVersionVo.getToken()); + InputStream inputStream = HttpUtils.getIntputStream("http://127.0.0.1:8080/api/projects/"+labelDatasetVersionVo.getProject_id()+"/export?exportType="+labelDatasetVersionVo.getExportType(), headers); + // 构建objectName + String username = SecurityUtils.getLoginUser().getUsername(); + String url = username + "/" + DateUtils.dateTimeNow() + "/" + dataset.getName()+"_"+labelDatasetVersionVo.getVersion()+"."+labelDatasetVersionVo.getExportType(); + String objectName = "datasets/" + url; + String formattedSize = FileUtil.formatFileSize(inputStream.available()); + minioService.uploaInputStream(bucketName,objectName,inputStream); //保存DatasetVersion + DatasetVersion datasetVersion = new DatasetVersion(); + datasetVersion.setVersion(labelDatasetVersionVo.getVersion()); + datasetVersion.setDatasetId(labelDatasetVersionVo.getDataset_id()); + datasetVersion.setFileName(dataset.getName()+"_"+labelDatasetVersionVo.getVersion()+"."+labelDatasetVersionVo.getExportType()); + + datasetVersion.setFileSize(formattedSize); + datasetVersion.setUrl(url); + datasetVersion.setDescription(labelDatasetVersionVo.getDesc()); + this.insert(datasetVersion); } private void insertPrepare(DatasetVersion datasetVersion) throws Exception { 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 f6e0c0b5..e03183dd 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 @@ -69,4 +69,9 @@ public class MinioServiceImpl implements MinioService { } return result; } + + @Override + public void uploaInputStream(String bucketName, String objectName, InputStream inputStream ) throws Exception { + minioUtil.uploadObject(bucketName, objectName, inputStream); + } } 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 653e9b76..cc3ff71e 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 @@ -17,6 +17,7 @@ import com.ruoyi.system.api.model.LoginUser; import io.minio.messages.Item; import io.netty.util.Version; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.InputStreamResource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -59,7 +60,8 @@ public class ModelsServiceImpl implements ModelsService { // 固定存储桶名 - private final String bucketName = "platform-data"; + @Value("${minio.dataReleaseBucketName}") + private String bucketName; @Resource private MinioUtil minioUtil; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsVersionServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsVersionServiceImpl.java index f7a64ebd..5f289458 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsVersionServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsVersionServiceImpl.java @@ -8,6 +8,7 @@ import com.ruoyi.platform.mapper.ModelsVersionDao; import com.ruoyi.platform.service.ModelsVersionService; import com.ruoyi.system.api.model.LoginUser; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; @@ -35,7 +36,8 @@ public class ModelsVersionServiceImpl implements ModelsVersionService { private ModelsDao modelsDao; // 固定存储桶名 - private final String bucketName = "platform-data"; + @Value("${minio.dataReleaseBucketName}") + private String bucketName; /** * 通过ID查询单条数据 diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/HttpUtils.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/HttpUtils.java index 2102b376..b382eda9 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/HttpUtils.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/HttpUtils.java @@ -375,25 +375,54 @@ public class HttpUtils { } + /** - * 发送 HTTP 请求并返回二进制数据流(InputStream)。 + * 发送 HTTP 请求并返回二进制数据流(OutputStream)。 * * @param url 请求的 URL 地址。 - * @param token 要携带的 Token。 - * @return 服务器响应的二进制数据流(InputStream)。 + * @param headers 头节点。 + * @return 服务器响应的二进制数据流(OutputStream)。 * @throws IOException 如果请求失败或发生其他 I/O 错误。 */ - public static InputStream getInputStream(String url, String token) throws IOException { + public static InputStream getIntputStream(String url, Map headers) throws IOException { URL requestUrl = new URL(url); HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection(); + + // Set request headers + for (Map.Entry entry : headers.entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + + // Set other connection properties (e.g., timeouts, request method, etc.) connection.setRequestMethod("GET"); - connection.setRequestProperty("Authorization", "Bearer " + token); // 添加 Authorization 头部,携带 Token + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + // Connect and get the response code + connection.connect(); int responseCode = connection.getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_OK) { - return connection.getInputStream(); // 获取响应的输入流 + // Get the response InputStream + InputStream inputStream = connection.getInputStream(); + +// // Create a ByteArrayOutputStream to store the response data +// ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); +// +// // Read data from the InputStream and write it to the ByteArrayOutputStream +// byte[] buffer = new byte[1024]; +// int bytesRead; +// while ((bytesRead = inputStream.read(buffer)) != -1) { +// outputStream.write(buffer, 0, bytesRead); +// } +// +// // Close the InputStream +// inputStream.close(); + + // Return the ByteArrayOutputStream as an OutputStream + return inputStream; } else { - throw new IOException("HTTP 请求失败,状态码:" + responseCode); + throw new IOException("HTTP request failed with response code: " + responseCode); } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/LabelDatasetVersion.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/LabelDatasetVersionVo.java similarity index 86% rename from ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/LabelDatasetVersion.java rename to ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/LabelDatasetVersionVo.java index bf223e73..11a2e718 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/LabelDatasetVersion.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/vo/LabelDatasetVersionVo.java @@ -6,10 +6,10 @@ import com.fasterxml.jackson.databind.annotation.JsonNaming; import java.io.Serializable; @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) -public class LabelDatasetVersion implements Serializable { +public class LabelDatasetVersionVo implements Serializable { private String token; private String project_id; - private String dataset_id; + private Integer dataset_id; private String version; private String desc; private String exportType; @@ -29,11 +29,11 @@ public class LabelDatasetVersion implements Serializable { this.project_id = project_id; } - public String getDataset_id() { + public Integer getDataset_id() { return dataset_id; } - public void setDataset_id(String dataset_id) { + public void setDataset_id(Integer dataset_id) { this.dataset_id = dataset_id; }