开发者社区> 问答> 正文

求助:我的servlet下载zip数据总是无法弹出下载窗口,怎么解决?? 400 报错

求助:我的servlet下载zip数据总是无法弹出下载窗口,怎么解决?? 400 报错

最近变问题宝宝了。。。

上相关代码:

js:dataParams是请求参数

$.ajax( {
		url : "../monitorlog.action",
		contentType : "application/x-www-form-urlencoded; charset=utf-8",
		type : 'get',
		data : dataParams,
		error : function(XMLHttpRequest, textStatus, errorThrown) {
			showError(XMLHttpRequest.responseText);
		}
	});

后台:

resp.setContentType("application/vnd.ms-excel");
resp.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName).getBytes(), "ISO-8859-1"));	
OutputStream out = resp.getOutputStream();
			    
ExportTemplet.downloadLogs(files, out);	

//---------------------------------------	
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(os, 1024));
		try{  for(File f:files){
				zos.putNextEntry(new ZipEntry(f.getName())); 
				System.out.println(f.length());
				FileInputStream fis = new FileInputStream(f);  
		        byte[] buffer = new byte[1024];  
		        int r = 0;  
		        while ((r = fis.read(buffer)) != -1) {  
		            zos.write(buffer, 0, r);  
		        }  
		        fis.close();
			}
			zos.flush();  
			zos.close();
从开发工具里看到页面请求相应为


展开
收起
爱吃鱼的程序员 2020-06-05 13:36:06 582 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你的 content-type 不要设置为 excel,这样有些浏览器会直接打开,可设置为 application/octet-stream
    ######

    resp.setContentType("application/zip"); resp.setHeader("Content-Disposition", "attachment; filename="DATA.ZIP"");
    ######

    这个ajax可以下载文件?求教啊。

    个人一般A链接或者append一个隐藏的iframe(src属性指向文件地址),在后台自己读一遍除非特殊需求,否则很少这样做吧

    ######谢谢楼上各位,在浏览器试了下直接打开请求的url,能弹出下载框,说明是$.ajax的问题...
    2020-06-05 13:36:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
附件下载测试 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载