I'm downloading zip in the same way ($http / arrayBuffer) and it works.
I would guess that the problem come from :
encodeURI(data)
I think you should encode it in base64 (there is tons of exemples out there like https://github.com/niklasvh/base64-arraybuffer/blob/master/lib/base64-arraybuffer.js )