2014-04-06 57 views
0

在Neo4j中存儲圖像(二進制數組)的最佳方式是什麼? 我將它們存儲爲二進制數組,但是如何使用Cypher查詢來檢索它們? 我有這個查詢,其中圖片已被存儲爲二進制數組,但它似乎有一個例外。Neo4j - 使用密碼查詢存儲和檢索圖像

Match (n:`employees`) where employeeid='1' return n.picture 

這是一個完整的堆棧跟蹤:(圖像大小爲12KB)

org.neo4j.rest.graphdb.RestResultException: Unhandled array type: class [B at 
UnsupportedOperationException 
    org.neo4j.server.helpers.PropertyTypeDispatcher.dispatchArray(PropertyTypeDispatcher.java:720) 
    org.neo4j.server.helpers.PropertyTypeDispatcher.dispatchNumberArray(PropertyTypeDispatcher.java:715) 
    org.neo4j.server.helpers.PropertyTypeDispatcher.dispatchByteArrayProperty(PropertyTypeDispatcher.java:675) 
    org.neo4j.server.helpers.PropertyTypeDispatcher.dispatchByteArrayProperty(PropertyTypeDispatcher.java:280) 
    org.neo4j.server.helpers.PropertyTypeDispatcher.dispatchPrimitiveArray(PropertyTypeDispatcher.java:135) 
    org.neo4j.server.helpers.PropertyTypeDispatcher.dispatch(PropertyTypeDispatcher.java:122) 
    org.neo4j.server.rest.repr.CypherResultRepresentation.getRepresentation(CypherResultRepresentation.java:185) 
    org.neo4j.server.rest.repr.CypherResultRepresentation.access$000(CypherResultRepresentation.java:38) 
    org.neo4j.server.rest.repr.CypherResultRepresentation$2$1.underlyingObjectToObject(CypherResultRepresentation.java:103) 
    org.neo4j.server.rest.repr.CypherResultRepresentation$2$1.underlyingObjectToObject(CypherResultRepresentation.java:99) 
    org.neo4j.helpers.collection.IterableWrapper$MyIteratorWrapper.underlyingObjectToObject(IterableWrapper.java:57) 
    org.neo4j.helpers.collection.IteratorWrapper.next(IteratorWrapper.java:47) 
    org.neo4j.server.rest.repr.ListRepresentation.serialize(ListRepresentation.java:64) 
    org.neo4j.server.rest.repr.Serializer.serialize(Serializer.java:75) 
    org.neo4j.server.rest.repr.ListSerializer.addList(ListSerializer.java:56) 
    org.neo4j.server.rest.repr.ListRepresentation.addTo(ListRepresentation.java:79) 
    org.neo4j.server.rest.repr.ListRepresentation.serialize(ListRepresentation.java:65) 
    org.neo4j.server.rest.repr.Serializer.serialize(Serializer.java:75) 
    org.neo4j.server.rest.repr.MappingSerializer.putList(MappingSerializer.java:61) 
    org.neo4j.server.rest.repr.CypherResultRepresentation.serialize(CypherResultRepresentation.java:83) 
    org.neo4j.server.rest.repr.MappingRepresentation.serialize(MappingRepresentation.java:41) 
    org.neo4j.server.rest.repr.OutputFormat$1.write(OutputFormat.java:160) 
    org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112) 
    java.lang.Thread.run(Unknown Source) 
+0

您可以嘗試使用事務端點嗎?也許用neo4j-jdbc驅動程序?或者通過捲曲直接測試它?這個問題是Neo4j-Server中的一個錯誤。你可以在github上提出它,但它已經過時了,所以我不確定這是值得修復的。 –

回答

2

是一個實際的暗號聲明你正在使用?如果是這樣你只是錯過鍵入 WHERE n.empoyeeid =「1」

是字節就可以了(因爲[]字節) Neo4j api docs

但它沒有GridFS的或類似的存儲所以如果斑點大我會建議使用S3或存儲在磁盤上,只是在neo節點中的指針。但它應該再次運作。

+0

我忘了提及我正在使用java-rest bind api。因此,實際的代碼是:restresult = restengine.query(「Match(n:'employees')其中employeeid ='1'返回n.picture」,Collections.EMPTY_MAP)並引發此異常:org.neo4j.rest.graphdb .RestResultException:未處理的數組類型:class [B at。任何想法會是什麼解決方案? – user3353973

+0

你可以分享完整的堆棧跟蹤嗎?無論如何,JSON對二進制數據沒有很好的支持,如果它們很小或許只是存儲base64編碼的字符串,那麼通過線路使用二進制數組是非常棘手的。對於較大的文件,我同意Lundin,只是將URL或文件名存儲到二進制文件(或到另一個blob存儲區的密鑰) –

+0

我添加了完整的堆棧跟蹤。如果我想將它們存儲在節點中怎麼辦?我應該將它們編碼爲字符串嗎? – user3353973