java - 如何使用GridFSInputFile和GridFS而不在MongoDB中添加文件并使用Java?

标签 java mongodb file gridfs

我正在开发一个应用程序,某些用户可以添加评论并附加文件,这是用户界面中的一个简单表单。在这种情况下,有时可以选择添加文件,但必须添加注释。 当用户在评论中添加文件时...我有以下代码:

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

但是gfsFile.save();返回nul。我肯定需要使用这种方式稍后获取带有或不带有文件附件的评论列表。

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

我该怎么做?

最佳答案

我认为您在这里唯一缺少的是一个“空”输入流,其中没有文件附件。这很容易修复:

    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

当我去 shell 中寻找它时:

> 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”集合没有关联的对象。但这应该是预料之中的。

因此,如果该对象可用,您稍后可以随时获取该对象并向其中添加真实内容。

关于java - 如何使用GridFSInputFile和GridFS而不在MongoDB中添加文件并使用Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31476617/

相关文章:

java - 服务器和浏览器的时间差

java - GridLayout 中的 JTextField

java - setDisplayHomeAsUpEnabled 不显示带有自定义操作栏 View 的后退箭头

node.js - 如何获取特定项目在每个文档的数组元素中出现的总次数

file - 批处理文件正则表达式以查找名称中带有数字的文件

C程序打不开文件

java - 使用jdk1.3的轻量级java web框架

node.js - MongoDB Cursor - 计算和枚举文档的有效方法(在 Node 中)

node.js - mongoose.model 函数中的名称与 mongodb 中的集合名称不同

ios - iOS中如何检测文件是否被修改?