If you are sure that the zip file is correct, that error often comes from a corrupted content. An ajax request, if not prepared correctly, will try to decode the binary content as a text and corrupt it. See this page.
That happens if you try to handle to much data with the synchronous API. If possible, try the asynchronous API, see this page for more informations.