当前位置: 首页 > 知识库问答 >
问题:

如何在mongoDB GridFS中覆盖图像?

柯冯浩
2023-03-14

我正在使用MongoDB 3.2和Java 1.8版本和Mongo-Java驱动程序。我已将图像保存在数据库中。我能够保存图像,读取图像和读取所有图像。现在我想在GridFS中更新图像。如果图像的名称相同,我想覆盖图像。当我试图用相同的名字保存图像时,我得到了两个图像。我正在使用下面的代码来保存图像。

GridFSBucket gridFSBucket = GridFSBuckets.create(database, imageCollection);
        InputStream streamToUploadFrom = new FileInputStream(new File(imageFileName));
        GridFSUploadOptions options = new GridFSUploadOptions()
                .metadata(new Document("type", "brand").append("name", name).append("uuid", UUID.randomUUID().toString()));
        ObjectId fileId = gridFSBucket.uploadFromStream(name, streamToUploadFrom, options)

谁能指导我到任何特定的文档链接/工作周围,以便我可以覆盖/更新图像。

共有1个答案

仲孙奇
2023-03-14

无法在GridFS中更新文件。每个文档实际上被拆分成多个块,因此不可能更新一个文件。因此,我建议先删除您想要更新的文件,然后再导入新的文件。

GridFSBucket gridFSBucket = GridFSBuckets.create(database, imageCollection);

GridFSBucket gridFSBucket = GridFSBuckets.create(database, imageCollection);
InputStream streamToUploadFrom = new FileInputStream(new File(new_image_file));

Document query = new Document("metadata.name", "image1");
MongoCursor<Document> cursor = database.getCollection(imagecollection+".files").find(query).iterator();

while (cursor.hasNext()) {
    Document document = cursor.next();
    Document metadata = document.get("metadata", Document.class);

    ObjectId _id = document.getObjectId("_id");
    gridFSBucket.delete(_id);

    GridFSUploadOptions options = new GridFSUploadOptions().metadata(metadata);
    ObjectId fileId = gridFSBucket.uploadFromStream("image1", streamToUploadFrom, options);
}
 类似资料:
  • 问题内容: 我目前在glassfish v2.1中使用基于身份的身份验证来登录用户,并且工作正常。我想切换到该网站,并希望能够获得最初请求的URL(即在重定向到登录页面之前),并在我的程序化登录代码中使用它,以便在身份验证后将用户重定向回请求的页面。 我已经看过源代码-在我的情况下,它是(catalina代码库),它将初始请求保存在会话中的对象中,但是该会话不是,因此没有直接方法可以访问它。 还是

  • 问题内容: 未正确探讨此问题。真正的问题在于。 原始问题中的第一个代码粘贴将产生预期的结果。但是,仍然需要注意。请参阅以下示例: 是 不 一样的 也就是说,不会自动调用与User对象关联的方法。 实际上 ,如果在模型上被覆盖,将生成以下描述。 摘要 这一切对我来说似乎很愚蠢。这似乎是在告诉我在指定类型时实际上并没有在调用。有人可以解释这里的实际情况吗? 任何可以帮助我解决这个问题的精灵都可以回答我

  • 问题内容: 根据航行中的这个封闭问题:https : //github.com/balderdashy/sails/issues/835 CRUD蓝图覆盖 “绝对是,这将在v0.10中推出” 我想修改我的sailsjs服务中的蓝图,以允许命名的根(用在余烬中)。目前,我必须使用动作对自定义创建的每个控制器进行自定义,这些动作与蓝图中已存在的动作在很大程度上重复。 我怀疑我现在可以将此代码移出控制器

  • 问题内容: 我想创建一个具有任意大小的div,然后在该div上显示一些内容。完全按照CSS中下面的div定位和调整叠加层大小的最佳方法是什么? 问题答案: 您可以使用将叠加层放置在div内部,然后在各个方向上将其拉伸,如下所示: CSS 已更新* 您只需要确保您的父div为其添加了属性,并为其设置了更低的属性。 为下面的评论者制作了一个可以在所有浏览器(包括IE7 +)上运行的演示。 从CSS中移

  • 我想重写java中的getProperty()方法。util。物业类别,请告知。 1.Spring上下文文件 2.Java类 3.配置文件 仅供参考:我正在从配置文件中提取批次值,并希望在从中获取值后调用trim()。属性,以避免代码冗余,尝试重写getProperty()方法。 使用:Spring 4.0

  • 问题内容: 我需要快速绘制作为跟踪算法输出结果的jpg帧。与jpg框架相对应的是文本文件,其中包含简单(x,y)数据,用于定位要跟踪的图像目标。我想使用matplotlib绘制jpg图像,然后覆盖(x,y)数据的散点图,该数据从文本文件中读取并存储到Pythonic列表中。下面是将绘制jpg图像的代码,但是在我对matplotlib,scipy和PIL手册以及帮助页面进行的所有搜索中,我找不到能解