I too have saved images in blobs (in development environment admittedly) .  
Sample code can be seen here:

https://github.com/acobley/instagrim/blob/master/src/main/java/uk/ac/dundee/computing/aec/instagrim/models/PicModel.java

Note this code uses the org.imgscalr.Scalr to resize and process  images, which 
might not be what you want.  It also uses temporary files to store the images 
for processing which i *know* is not best practice.

Andy

On 30 Sep 2014, at 08:53, Sylvain Lebresne 
<sylv...@datastax.com<mailto:sylv...@datastax.com>> wrote:

On Tue, Sep 30, 2014 at 2:25 AM, Robert Coli 
<rc...@eventbrite.com<mailto:rc...@eventbrite.com>> wrote:
On Mon, Sep 22, 2014 at 3:50 AM, Carlos Scheidecker 
<nando....@gmail.com<mailto:nando....@gmail.com>> wrote:
I can successfully read a file to a ByteBuffer and then write to a Cassandra 
blob column. However, when I retrieve the value of the column, the size of the 
ByteBuffer retrieved is bigger than the original ByteBuffer where the file was 
read from. Writing to the disk, corrupts the image.

Probably don't write binary blobs like images into a database, use a 
distributed filesystem?

I've very successfully stored lots of small images into Cassandra so I have to 
disagree with that far too quick conclusion. Cassandra always read blobs in 
their entirety, so it's definitively not very good with very large blobs, but 
there is many cases where images are known to be pretty small (I was personally 
storing thumbnails) and in those cases, it is my experience that Cassandra is a 
very viable solution.


But I agree that this behavior sounds like a bug, I would probably file it as a 
JIRA on http://issues.apache.org<http://issues.apache.org/> and then tell the 
list the URL of the JIRA you filed.

I actually doubt it is a bug, and it's almost certainly not a Cassandra bug (so 
please, do *no* open a JIRA on 
http://issues.apache.org<http://issues.apache.org/>). I suspect a bad use of 
the ByteBuffer API (which is definitively a very confusing API, but that's what 
Java gives us). Typically, in your snippet of code above, the line:
byte[] data = new byte[buffer.limit()];
is incorrect. 'buffer.limit()' is not the number of valid bytes in the buffer, 
you should use 'buffer.remaining()' for that. You should also be careful with 
messing with 'arrayOffset', a line that
    buf.position(buf.arrayOffset());
(also from one of you snippet above) is almost surely wrong.

--
Sylvain


The University of Dundee is a registered Scottish Charity, No: SC015096

Reply via email to