2017-11-20 19 views
3

ファイルをアップロードし、アプリケーションのmongodbから取得します。しかし、私はfile size16 MBより大きくないので、GridFSTemplateを使用したくありません。私はGridFSTemplateを選択していません。なぜなら、リンクhttps://docs.mongodb.com/manual/core/gridfs/#faq-developers-when-to-use-gridfsに記載されている要件のいずれも私の要件を満たしていないからです。 Documentと協力してファイルを保存し、MongoTemplateを使用してファイルを取得するのは良い方法ですか? マイドキュメント定義はGridFSTemplateを使用せずにSpringブートアプリケーションでmongodbにファイルをアップロードおよび取得する方法は?

私は emailようないくつかの情報とともに store fileしたいファイル

MyDocument document = new MyDocument(); 
document.setEmailId("[email protected]"); 
document.setDocType("passport"); 
document.setDocument(file); 
mongoTemplate.insert(document); 

を保存

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

のようになります。後で私はretrieveこのfileに基づいてemailパラメータになります。 このアプローチが良いのか、それとも他のより良い解決策が評価されているのかをお勧めします。

答えて

0

mongodbGridFSを使用せずにファイルを保存する方法を最終的に見出すことができました。まずファイルの表現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であることを確認してください。 objectmonogodbに保存するコントローラコードは次のとおりです。

@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を取得することができます。

これはわかりやすいサンプルコードです。デザイン原則を念頭に置いて完全なオブジェクト指向の方法で記述することができます。

関連する問題