在页面上点按钮调用action下载csv文件,后台代码看了好多网上例子,就是不能实现下载。
查了好久才发现,之前为了调用后台action,在js里通过ajax调用后台,无论如何都不行,改成
var action = "xxxe.do?ope=export";
window.location.href=action;
改成这样就可以了,一直以为是后台的原因。
附上后台生成csv例子,有两种方式,一种是调用服务器上生成的csv,另一种是直接导出。
1.调用服务器上csv
java.io.OutputStream o = response.getOutputStream();
byte b[] = new byte[500];
java.io.File fileLoad = new java.io.File(request.getRealPath("/csvTmp/"+"/test.csv"));
//System.out.println(fileLoad.getPath());
response.reset();
//response.setContentType("application/vnd.ms-excel");
response.setContentType("application/csv");
response.setHeader("content-disposition",
"attachment; filename=textaa.csv");
long fileLength = fileLoad.length();
String length1 = String.valueOf(fileLength);
response.setHeader("Content_Length", length1);
java.io.FileInputStream in = new java.io.FileInputStream(fileLoad);
int n;
while ((n = in.read(b)) != -1) {
o.write(b, 0, n);
}
in.close();
o.close();
2.直接导出
response.setContentType("application/csv");
//response.setContentType("application/unknown"); //this also works
response.setHeader("content-disposition","attachment; filename=test.csv"); // set the file name to whatever required..
PrintWriter out = response.getWriter();
out.println("a,b,c,d,e,f");
out.println("1,2,3,4,5,6");
out.flush();
out.close();