【问题标题】:Error while reading blob (binary) data from mongodb using Java使用 Java 从 mongodb 读取 blob(二进制)数据时出错
【发布时间】:2017-07-14 15:01:51
【问题描述】:

无法从 MongoDB 读取 blob(二进制)记录,我使用的是 Java 3.4.2 驱动程序。

    BasicDBObject whereClause = new BasicDBObject();
    List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
    obj.add(new BasicDBObject("blobcontentid", "20160601201035069394000000"));
    whereClause.put("$and", obj);

    MongoCursor<Document> cursor = contentcollection.find(whereClause).iterator();

    while (cursor.hasNext()) {
        Document object = cursor.next();
        System.out.println(object.getString("blobcontentid"));
        if (object.get("content") != null){
            byte[] content = (byte []) object.get("content");   
        } else {
            System.out.println("Content is empty");
        }           
    }

错误:java.lang.ClassCastException:org.bson.types.Binary 无法转换为 [B

同样的记录在 DB2 中是这样读取的。 byte[] content = aResult.getBytes("CONTENT");

提前感谢您! 婆罗洲

【问题讨论】:

  • 实际上在Binary 类型上定义了一个.getData() 方法。这当然会返回byte[],因此无需尝试强制进行此类转换。只要使用正确的方法。

标签: java mongodb mongodb-java


【解决方案1】:

您可以使用get() method on a Document with built-in casting 来实现此目的。例如:

// Insert a binary data (byte array) into the database
Document document = new Document("blob", "This is a byte array blob".getBytes());
collection.insertOne(document);

// Find and print the inserted byte array as String
for (Document doc : collection.find()) {
    Binary bin = doc.get("blob", org.bson.types.Binary.class);
    System.out.println(new String(bin.getData()));
}

这会将插入数据库的This is a byte array blob打印回控制台。

由于插入操作,数据库将包含一个BinData 元素:

> db.collection.find()
{
  "_id": ObjectId("5976e23911e6772c5d32c42d"),
  "blob": BinData(0, "VGhpcyBpcyBhIGJ5dGUgYXJyYXkgYmxvYg==")
}

请注意,如果由于BSON 16MB document size limitation 而插入大量二进制数据,此方法可能不起作用。如果需要插入超过 16MB 的二进制数据,我建议改用GridFS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 2018-01-16
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多