有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在MongoDB中使用GridFSInputFile和GridFS,而不使用add file和Java?

我正在开发一个应用程序,当一些用户可以添加一个目录并附加一个文件时,它是UI中的一个简单表单。在这种情况下,添加一个文件是可选的,但必须添加一个附件。 如果用户在comentary中添加文件。。。我有这个密码:

    BasicDBObject metadata = new BasicDBObject();
    metadata.put("_id", UUID.randomUUID().toString());
    metadata.put("comentary", "Hola que hace");
    metadata.put("date", (new Date().toString()));
    metadata.put("applicationID", "1111-111");

    GridFS gridFS = new GridFS(mongoTemplate.getDb(), "noteAndFile");
    GridFSInputFile gfsFile = gridFS.createFile(file);
    gfsFile.put("metadata", metadata);
    gfsFile.save();

这段代码可以工作,但是用户没有添加文件,我有:

    BasicDBObject metadata = new BasicDBObject();
    metadata.put("_id", UUID.randomUUID().toString());
    metadata.put("comentary", "Segundo persist");
    metadata.put("date", (new Date().toString()));
    metadata.put("applicationID", "2222-222");

    GridFS gridFS = new GridFS(mongoTemplate.getDb(), "noteAndFile");
    GridFSInputFile gfsFile = gridFS.createFile();
    gfsFile.put("metadata", metadata);
    gfsFile.save();

但是返回nul。我肯定需要使用这种方式,以获得一个评论列表,有或没有文件附件

    BasicDBObject allComentaryWithOrNotFileAttach = new BasicDBObject();
    List<GridFSDBFile> files = gridFS.find(allComentaryWithOrNotFileAttach);

我该怎么做


共 (1) 个答案

  1. # 1 楼答案

    我认为这里唯一缺少的是一个没有文件附件的“空”输入流。这很容易解决:

        String mystring = new String();   // an empty string
    
        GridFS gridFS = new GridFS(mongoTemplate.getDB(),"noteAndFile");
        GridFSInputFile gfsFile = gridFS.createFile(
            new ByteArrayInputStream( mystring.getBytes() )
        );
    
        BasicDBObject meta = new BasicDBObject();
        meta.put("comments","hi");
    
        gfsFile.put("metadata",meta);
        gfsFile.save();
    
        System.out.println(gfsFile.getId());    // gives me the _id of the object saved
    

    当我在贝壳里寻找时:

    > db.noteAndFile.files.findOne()
    {
        "_id" : ObjectId("55a909057c712d9f488c88e7"),
        "chunkSize" : NumberLong(261120),
        "length" : NumberLong(0),
        "md5" : "d41d8cd98f00b204e9800998ecf8427e",
        "filename" : null,
        "contentType" : null,
        "uploadDate" : ISODate("2015-07-17T13:54:13.837Z"),
        "aliases" : null,
        "metadata" : {
                "comments" : "hi"
        }
    }
    

    当然,因为这里的“bytestream”是空的,所以“chunks”集合没有关联的对象。但这是意料之中的

    所以,你可以随时抓取这个对象,并添加真正的内容,如果它变得可用时