gpt4 book ai didi

mongodb - 如何在不使用GridFSTemplate的情况下在spring boot应用程序中上传和检索mongodb中的文件?

转载 作者:IT老高 更新时间:2023-10-28 13:26:50 25 4
gpt4 key购买 nike

我想上传文件并从 spring boot 应用程序中的 mongodb 中检索它们。但我不想使用 GridFSTemplate,因为我的 file size 不会大于 16 MB。我没有选择 GridFSTemplate 因为链接 https://docs.mongodb.com/manual/core/gridfs/#faq-developers-when-to-use-gridfs 中没有提到任何要求不符合我的要求。使用 Document 保存文件并使用 MongoTemplate 检索它们是一种好方法吗?MyDocument 定义看起来像

@Document
public class MyDocument {
@Id
private String id;
private String emailId;
private String docType;
@CreatedDate
private DateTime created;
@LastModifiedDate
private DateTime modified;
private File document;
}

存储文件

MyDocument document = new MyDocument();
document.setEmailId("abc@gmail.com");
document.setDocType("passport");
document.setDocument(file);
mongoTemplate.insert(document);

我想存储文件以及一些信息,例如email。稍后我会根据email 参数retrieve 这个file。请建议这种方法是否良好或其他更好的解决方案是否值得赞赏。

最佳答案

我终于可以找到在 mongodb 中不使用 GridFS 来存储文件的方法了。首先要注意的是,我们必须存储文件的 byte[] 表示形式。

import org.bson.types.Binary;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Document
public class DemoDocument {
@Id
@Field
private String id;

@Field
private String emailId;

@Field
private String docType;

@Field
private Binary file;
}

确保您的文件对象是 org.bson.types.Binary。以下是我在 monogodb 中保存 object 的 Controller 代码。

@PostMapping("/upload")
public String singleFileUpload(@RequestParam("file") MultipartFile multipart, @RequestParam("email") String email) {
try {
DemoDocument demoDocument = new DemoDocument();
demoDocument.setEmailId(email);
demoDocument.setDocType("pictures");
demoDocument.setDocument(new Binary(BsonBinarySubType.BINARY, multipart.getBytes()));
mongoTemplate.insert(demoDocument);
System.out.println(demoDocument);
} catch (Exception e) {
e.printStackTrace();
return "failure";
}
return "success";
}

您可以从 mongodb 中检索此 object,如下所示。

@PostMapping("/retrieve")
public String retrieveFile(@RequestParam("email") String email){
DemoDocument demoDocument = mongoTemplate.findOne(new BasicQuery("{emailId : \""+email+"\", docType : \"pictures\"}"), DemoDocument.class);
System.out.println(demoDocument);
Binary document = demoDocument.getDocument();
if(document != null) {
FileOutputStream fileOuputStream = null;
try {
fileOuputStream = new FileOutputStream(RETRIEVE_FOLDER + "prof_pic.jpg");
fileOuputStream.write(document.getData());
} catch (Exception e) {
e.printStackTrace();
return "failure";
} finally {
if (fileOuputStream != null) {
try {
fileOuputStream.close();
} catch (IOException e) {
e.printStackTrace();
return "failure";
}
}
}
}
return "success";
}

请注意,这只是用于理解的示例工作代码。它可以以完全面向对象的方式编写,同时牢记设计原则。

关于mongodb - 如何在不使用GridFSTemplate的情况下在spring boot应用程序中上传和检索mongodb中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47389374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com