如何从一个action里直接输出一个服务器端的文件? 如何从一个用struts的action里直接输出一个服务器端的文件? 比如一个如何输出/export/test.xls到客户端下载?最好不经过jsp. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大概是这样,首先取得带路径的文件名然后try{ response.setContentType("APPLICATION/OCTET-STREAM"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition","attachment; filename=\""+ filename + "\""); java.io.InputStreamReader in = new java.io.InputStreamReader(new java.io.FileInputStream(file),"utf-8"); javax.servlet.ServletOutputStream sout = response.getOutputStream(); char[] buf = new char[8192]; while ( in.read(buf) != -1) { sout.write((new String(buf)).getBytes("gb2312")); } in.close(); sout.close(); }catch(Exception e){ logger.debug(e.toString() ); e.printStackTrace() ; }程序里的编码要改成你的文件的编码 file是带路径的文件名filename就是纯粹的文件名String filename = file ;String separator = System.getProperty("file.separator") ;filename = filename.substring(filename.lastIndexOf(separator)+1); To vacuumboy(菜鸟依旧): 我是已经在action里生成了文件,现在要把这个文件输出到客户端,不必再读取这个文件了。 那就把内容用sout.write输出到客户端,但是文件名还是要的 文件名有问题,不是乱码就是象"CA63SP0L."这样的没有文件名的东西。 输出的文件内容没有问题。但输出的文件名有问题。一个是2006_柒哀璃厢o.xls另一个是CA0985WB代码如下String sheetName = departmentName + "\u65b0\u4ea7\u54c1\u4ea7\u91cf\u4fe1\u606f"; // export to client// response.reset();//清空输出流 response.setContentType("application/x-download");// response.setContentType("APPLICATION/OCTET-STREAM"); response.setContentType("application/msexcel");//定义输出类型// response.setContentType("application/vnd.ms-excel; charset=UTF-8"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + "\"");//设定输出文件头 OutputStream os = response.getOutputStream();//取得输出流 wb.write(os); os.flush(); os.close(); 应是String fileName = exportYear.toString() + "_" + departmentName + "\u65b0\u4ea7\u54c1\u4ea7\u91cf\u4fe1\u606f" + ".xls"; 我在控制台看文件名是没有问题的。保存到本地也没有问题。如2006_空调新产品信息.xls但输出就不行了。 我想制作一个网页,里面的写日志的模块怎么写?谢先~ 我不能控制mysql乱码 急需解决!高手请进!! 大家帮我看一道弱智的题目:444*0.8 等于多少 急求word的VBA。! applet安全策略问题,求助java大牛,项目挺紧,实在是找不到解决办法了 一个很简单的地址转换问题?奉送100分 关于从Access中取数据的问题 tomcat启动时报错 Unable to process file 文件下载 小白求解 新建JAVA群(16274661) 怎么样去除字符串中间的空格?例如String str="acb aaa";
try{
response.setContentType("APPLICATION/OCTET-STREAM");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition","attachment; filename=\""+ filename + "\"");
java.io.InputStreamReader in = new java.io.InputStreamReader(new java.io.FileInputStream(file),"utf-8");
javax.servlet.ServletOutputStream sout = response.getOutputStream();
char[] buf = new char[8192];
while ( in.read(buf) != -1) {
sout.write((new String(buf)).getBytes("gb2312"));
}
in.close();
sout.close();
}catch(Exception e){
logger.debug(e.toString() );
e.printStackTrace() ;
}
程序里的编码要改成你的文件的编码
filename就是纯粹的文件名
String filename = file ;
String separator = System.getProperty("file.separator") ;
filename = filename.substring(filename.lastIndexOf(separator)+1);
但输出的文件名有问题。
一个是2006_柒哀璃厢o.xls
另一个是CA0985WB代码如下String sheetName = departmentName + "\u65b0\u4ea7\u54c1\u4ea7\u91cf\u4fe1\u606f"; // export to client
// response.reset();//清空输出流
response.setContentType("application/x-download");
// response.setContentType("APPLICATION/OCTET-STREAM");
response.setContentType("application/msexcel");//定义输出类型
// response.setContentType("application/vnd.ms-excel; charset=UTF-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + "\"");//设定输出文件头 OutputStream os = response.getOutputStream();//取得输出流
wb.write(os);
os.flush();
os.close();
String fileName = exportYear.toString() + "_" + departmentName + "\u65b0\u4ea7\u54c1\u4ea7\u91cf\u4fe1\u606f" + ".xls";
如2006_空调新产品信息.xls
但输出就不行了。