Sar*_*esh 6 file-upload mongodb spring-boot mongotemplate
我要上传文件和检索它们mongodb
的spring boot
应用程序.但我不想使用,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;
}
Run Code Online (Sandbox Code Playgroud)
存储文件
MyDocument document = new MyDocument();
document.setEmailId("abc@gmail.com");
document.setDocType("passport");
document.setDocument(file);
mongoTemplate.insert(document);
Run Code Online (Sandbox Code Playgroud)
我想要store file
一些类似的信息email
.后来,我将retrieve
这个file
基于email
参数.请建议这种方法是否合适,或者是否赞赏任何其他更好的解决方案.
我终于可以找出存储文件的方法而不使用GridFS
in mongodb
.首先要注意的是我们必须存储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;
}
Run Code Online (Sandbox Code Playgroud)
确保您的文件对象是org.bson.types.Binary
.以下是我的控制器代码保存object
在monogodb
.
@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";
}
Run Code Online (Sandbox Code Playgroud)
您可以object
从mongodb
以下检索此项.
@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";
}
Run Code Online (Sandbox Code Playgroud)
请注意,这只是用于理解的示例工作代码.它可以以完全面向对象的方式编写,牢记设计原则.
归档时间: |
|
查看次数: |
6004 次 |
最近记录: |