fix: [mongo测试文件存储]

This commit is contained in:
ovo 2025-02-19 23:06:52 +08:00
parent 1c6b2f75b6
commit 7fe4cda97b
8 changed files with 100 additions and 78 deletions

View File

@ -298,6 +298,12 @@
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>

View File

@ -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;

View File

@ -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<String> 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);
}
}

View File

@ -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"));

View File

@ -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)));
}
}

View File

@ -49,7 +49,7 @@ public class PapersServiceImpl extends ServiceImpl<PapersMapper, Papers>
return null;
}
redisUtil.set(PAPER_CACHE_KEY + id, paper);
redisUtil.set(PAPER_CACHE_KEY + id, paper,30);
return paper;
}

View File

@ -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

View File

@ -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());
}
}