Java 下载的zip文件已损坏
我试图让用户使用以下代码从服务器下载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,'
$.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();