Java 下载的zip文件已损坏

Java 下载的zip文件已损坏,java,javascript,spring-mvc,zip,Java,Javascript,Spring Mvc,Zip,我试图让用户使用以下代码从服务器下载zip文件: 服务器: 客户: $.ajax({ url: 'url-to-the-method/get-shape-file', type: 'GET', success: function(shape) { console.log(shape); var a = document.createElement('a'); a.href = 'data:attachment/zip,'

我试图让用户使用以下代码从服务器下载zip文件: 服务器:

客户:

 $.ajax({
    url: 'url-to-the-method/get-shape-file',
    type: 'GET',
    success: function(shape) {
        console.log(shape);
        var a = document.createElement('a');
        a.href = 'data:attachment/zip,' + shape;
        a.target = '_blank';
        a.download = 'exported-shape-file.zip';
        document.body.appendChild(a);
        a.click();
    },
    error: function(data) {
        Message.error("Could not download shapefile");
    }
});       
但下载的文件已损坏。大小超出了应有的大小,并且尝试在archive manager中打开文件时,会显示以下消息: zipinfo:在/home/tengiz/Downloads/exported shape file(1).zip或
/home/tengiz/Downloads/exported shape file(1).zip,找不到/home/tengiz/Downloads/exported shape file(1).zip,句号。

我解决了问题,结果发现问题出在客户端,而不是服务器端。 在客户端,我试图将响应附加到href,但由于响应包含字节码,因此丢失了一些重要字符。您需要做的只是创建一个带有控制器方法链接的标记,这样您就不需要像这样的ajax请求:

        var a = document.createElement('a');
        a.href = '/url-to/get-shape-file';
        document.body.appendChild(a);
        a.click();    

请参见@BalusC的答案:
        var a = document.createElement('a');
        a.href = '/url-to/get-shape-file';
        document.body.appendChild(a);
        a.click();