提问人:King Henry 提问时间:10/17/2023 更新时间:10/17/2023 访问量:41
如何下载AJAX java使用的zip文件
how to download zip file used by AJAX java
问:
通过ajax将数据传递给控制器后, 我在 C:\Users\user\AppData\Local\Temp 文件夹中完成了 zip 文件的创建。 它确实在我提到的上面的文件夹中打开得很好。 但是当我单击jsp按钮并下载它时,zip文件没有打开。它甚至占用空间。 我搜索了一下,仅使用ajax无法实现下载功能, 所以我添加了 xhr,但我遇到了困难,因为我对 xhr 了解不多。 你能告诉我哪里出了问题吗?
- JSP - AJAX的
$("#btnFileDown").click(function() {
var obj = $("#grid")
var ids = obj.getGridParam("selarrrow");
var id = obj.jqGrid("getDataIDs");
var params = new Array();
for(var i = 0; i < ids.length; i++) {
var data = obj.getRowData(ids[i]);
params.push(data);
}
$.ajax({
type: 'POST',
url : baseUrl + "fileDownload.et",
data : {data:JSON.stringify(params)},
success: function(data, textStatus, xhr) {
alert("Success");
let disposition = xhr.getResponseHeader('Content-Disposition');
let filename;
if (disposition && disposition.indexOf('attachment') !== -1) {
let filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
let matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
}
let blob = new Blob([data]);
let link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = filename;
link.click();
},
error: function(jqXHR, textStatus, errorThrown) {
alert("Failed => " + errorThrown);
}
});
});
- 服务器
@RequestMapping("fileDownload.et")
@Transactional
public void fileDownload(@RequestParam Map<String, Object> param, ModelMap modelMap, HttpServletResponse response) throws ParseException, FileNotFoundException, IOException {
// After creating ZipFile Code.
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" +URLEncoder.encode(zipFile.getName(), "UTF-8"));
response.setHeader("Content-Transfer-Encoding", "binary");
FileInputStream fin = new FileInputStream(zipFile);
ServletOutputStream fout = response.getOutputStream();
byte b[] = new byte[(int) zipFile.length()];
int leng = 0;
while ((leng = fin.read(b)) > 0) {
fout.write(b, 0, leng);
}
}
搜索所有网站并在 stackoverflow 中提问我的问题 但这并没有回应我任何人。
答: 暂无答案
评论
Files.copy(zipFile.toPath(), fout);
。并养成使用“使用资源试用”的习惯,那么你就不需要记住关闭了。