I am trying to save a binary object in redis and then serve it back as an image.
Here is the code I am using to save the data:
var buff=new Buffer(data.data,'base64');
client.set(key,new Buffer(data.data,'base64'));
Here is the code to dump the data out:
client.get(key,function(err,reply){
var data = reply;
response.writeHead(200, {"Content-Type": "image/png"});
response.end(data,'binary');
});
The first few byte of the data seem to be corrupted. The magic number is incorrect.
Did some experimenting:
when I do the following:
var buff=new Buffer(data.data,'base64');
console.log(buff.toString('binary'));
I get this:
0000000: c289 504e 470d 0a1a 0a00 0000 0d49 4844
when I do this
var buff=new Buffer(data.data,'base64');
console.log(buff);
I get the following:
Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00
I am not sure where the c2 is coming from
The problem is that the Redis client for Node converts responses to JavaScript strings by default.
I solved this by setting the return_buffers
option to true
when creating the client.
var client = redis.createClient(7000, '127.0.0.1', {'return_buffers': true});
See here for more details.