From 7fe4cda97be52a9b79fc126dfe92536bfcee8b07 Mon Sep 17 00:00:00 2001 From: ovo Date: Wed, 19 Feb 2025 23:06:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20[mongo=E6=B5=8B=E8=AF=95=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=AD=98=E5=82=A8]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 ++ .../backend/controller/CommonController.java | 7 +- .../backend/controller/DemoController.java | 24 +++++-- .../controller/QuestionsController.java | 6 +- .../backend/mongodb/FileStorageService.java | 67 +++++++++++++++++++ .../service/impl/PapersServiceImpl.java | 2 +- src/main/resources/application.yml | 2 +- .../backend/service/BookServiceTest.java | 64 ------------------ 8 files changed, 100 insertions(+), 78 deletions(-) create mode 100644 src/main/java/com/guwan/backend/mongodb/FileStorageService.java delete mode 100644 src/test/java/com/guwan/backend/service/BookServiceTest.java diff --git a/pom.xml b/pom.xml index f1b2d1e..88e47df 100644 --- a/pom.xml +++ b/pom.xml @@ -298,6 +298,12 @@ + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.kafka spring-kafka diff --git a/src/main/java/com/guwan/backend/controller/CommonController.java b/src/main/java/com/guwan/backend/controller/CommonController.java index f72b95e..58dbbc8 100644 --- a/src/main/java/com/guwan/backend/controller/CommonController.java +++ b/src/main/java/com/guwan/backend/controller/CommonController.java @@ -5,26 +5,23 @@ import com.guwan.backend.annotation.OperationLog; import com.guwan.backend.client.SimpleTTSClient; import com.guwan.backend.client.VoiceServiceClient; import com.guwan.backend.common.Result; -import com.guwan.backend.pojo.entity.BookContent; import com.guwan.backend.mongodb.EveryReadDetailOfMongodb; import com.guwan.backend.mongodb.EveryReadDetailOfMongodbService; -import com.guwan.backend.mongodb.User; import com.guwan.backend.mongodb.MongodbUserService; +import com.guwan.backend.mongodb.User; +import com.guwan.backend.pojo.entity.BookContent; import com.guwan.backend.util.MinioUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/main/java/com/guwan/backend/controller/DemoController.java b/src/main/java/com/guwan/backend/controller/DemoController.java index f606a23..ed1ae5c 100644 --- a/src/main/java/com/guwan/backend/controller/DemoController.java +++ b/src/main/java/com/guwan/backend/controller/DemoController.java @@ -4,19 +4,20 @@ import cn.easyes.core.conditions.LambdaEsQueryWrapper; import com.guwan.backend.common.Result; import com.guwan.backend.elasticsearch.document.ProductDocument; import com.guwan.backend.elasticsearch.mapper.ProductEsMapper; +import com.guwan.backend.mongodb.FileStorageService; import com.guwan.backend.util.MinioUtil; +import com.mongodb.client.gridfs.model.GridFSFile; import io.minio.MinioClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.elasticsearch.search.SearchHit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.List; @Slf4j @@ -37,6 +38,8 @@ public class DemoController { @Autowired private ProductEsMapper productEsMapper; + private final FileStorageService fileStorageService; + @PostMapping("/uploadFile") public Result uploadFile(String bucketName, MultipartFile file){ return Result.success(minioUtil.getUrl(minioUtil.getFileUrl @@ -97,4 +100,17 @@ public class DemoController { return Result.success("demo222"); } + + @PostMapping("/mongoFile") + public void mongoFile(@RequestPart("file") MultipartFile file) throws IOException { + fileStorageService.storeFile(file); + } + + @GetMapping("/mongoFile") + public void getMongoFile(String fileId) throws IOException { + GridFSFile file = fileStorageService.getFile(fileId); + System.out.println("file = " + file); + } + + } diff --git a/src/main/java/com/guwan/backend/controller/QuestionsController.java b/src/main/java/com/guwan/backend/controller/QuestionsController.java index efa943c..ea09d3e 100644 --- a/src/main/java/com/guwan/backend/controller/QuestionsController.java +++ b/src/main/java/com/guwan/backend/controller/QuestionsController.java @@ -93,12 +93,12 @@ public class QuestionsController { Questions question = questionsService.getById(id); - System.out.println(MultipleChoiceCompare.compare(question.getPoint(), question.getChoices(), + System.out.println(MultipleChoiceCompare.compare(question.getPoint(), question.getAnswer(), "A")); - System.out.println(MultipleChoiceCompare.compare(question.getPoint(), question.getChoices(), + System.out.println(MultipleChoiceCompare.compare(question.getPoint(), question.getAnswer(), "A, B")); - System.out.println(MultipleChoiceCompare.compare(question.getPoint(), question.getChoices(), + System.out.println(MultipleChoiceCompare.compare(question.getPoint(), question.getAnswer(), "A, C")); diff --git a/src/main/java/com/guwan/backend/mongodb/FileStorageService.java b/src/main/java/com/guwan/backend/mongodb/FileStorageService.java new file mode 100644 index 0000000..05b419b --- /dev/null +++ b/src/main/java/com/guwan/backend/mongodb/FileStorageService.java @@ -0,0 +1,67 @@ +package com.guwan.backend.mongodb; + +import com.mongodb.client.gridfs.model.GridFSFile; +import org.bson.types.ObjectId; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.gridfs.GridFsTemplate; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; + +@Service +public class FileStorageService { + + @Autowired + private GridFsTemplate gridFsTemplate; + + public String storeFile(MultipartFile file) throws IOException { + // 获取文件名和输入流 + String fileName = file.getOriginalFilename(); + InputStream inputStream = file.getInputStream(); + + // 存储文件到 GridFS + return gridFsTemplate.store(inputStream, fileName).toString(); + } + + public GridFSFile getFile(String fileId) throws IOException { + + ObjectId objectId = new ObjectId(fileId); + + + Query query = new Query(Criteria.where("_id").is(objectId)); + + + + // 根据文件 ID 获取文件 + GridFSFile gridFSFile = gridFsTemplate.findOne(query); + + if (gridFSFile == null) { + throw new IOException("文件未找到: " + fileId); + } + + // 获取文件的输入流 + try (InputStream inputStream = gridFsTemplate.getResource(gridFSFile) + .getInputStream()) { + // 将文件保存到本地 + Path localPath = Paths.get("D:\\00_桌面\\新建文件夹", gridFSFile.getFilename()); + Files.copy(inputStream, localPath, StandardCopyOption.REPLACE_EXISTING); + System.out.println("文件已保存到: " + localPath); + } + + return gridFSFile; + + } + + public void deleteFile(String fileId) { + // 根据文件 ID 删除文件 + gridFsTemplate.delete(new Query(Criteria.where("_id").is(fileId))); + } +} \ No newline at end of file diff --git a/src/main/java/com/guwan/backend/service/impl/PapersServiceImpl.java b/src/main/java/com/guwan/backend/service/impl/PapersServiceImpl.java index 785cf94..204c14c 100644 --- a/src/main/java/com/guwan/backend/service/impl/PapersServiceImpl.java +++ b/src/main/java/com/guwan/backend/service/impl/PapersServiceImpl.java @@ -49,7 +49,7 @@ public class PapersServiceImpl extends ServiceImpl return null; } - redisUtil.set(PAPER_CACHE_KEY + id, paper); + redisUtil.set(PAPER_CACHE_KEY + id, paper,30); return paper; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4077a32..00fb062 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -212,7 +212,7 @@ logging: xxl: job: admin: - addresses: http://192.168.0.6:9001/xxl-job-admin + addresses: http://192.168.0.121:9001/xxl-job-admin accessToken: GuwanTest executor: appname: xxl-job-executor-guwan diff --git a/src/test/java/com/guwan/backend/service/BookServiceTest.java b/src/test/java/com/guwan/backend/service/BookServiceTest.java deleted file mode 100644 index 0808c3e..0000000 --- a/src/test/java/com/guwan/backend/service/BookServiceTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.guwan.backend.service; - -import com.guwan.backend.pojo.entity.Book; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; -import static org.junit.jupiter.api.Assertions.*; - -class BookServiceTest { - - @Mock - private BookMapper bookMapper; - - @InjectMocks - private BookServiceImpl bookService; - - @BeforeEach - void setUp() { - MockitoAnnotations.openMocks(this); - } - - @Test - void addBook_Success() { - // 准备测试数据 - Book book = new Book(); - book.setName("测试书籍"); - book.setAuthor("测试作者"); - book.setIsbn("9787000000000"); - - when(bookMapper.insert(any(Book.class))).thenReturn(1); - - // 执行测试 - Book result = bookService.addBook(book); - - // 验证结果 - assertNotNull(result); - assertEquals("测试书籍", result.getName()); - verify(bookMapper, times(1)).insert(any(Book.class)); - } - - @Test - void getBookByIsbn_Success() { - // 准备测试数据 - Book book = new Book(); - book.setId(1L); - book.setName("测试书籍"); - book.setIsbn("9787000000000"); - - when(bookMapper.selectOne(any())).thenReturn(book); - - // 执行测试 - Book result = bookService.getBookByIsbn("9787000000000"); - - // 验证结果 - assertNotNull(result); - assertEquals("测试书籍", result.getName()); - assertEquals("9787000000000", result.getIsbn()); - } -} \ No newline at end of file