struts2下载的问题 就是下载弹出对话框选择下载和直接打开,取消时候点击直接打开中文出现乱码如果下载完后打开就没事不知道有没办法解决 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 struts.xml<result name="success" type="streamx"> <param name="contentType">application/vnd.ms-excel;charset=ISO8859-1</param> <param name="contentDisposition">attachment;filename="${fileName}"</param> <param name="inputName">inPutStream</param> <param name="bufferSize">4096</param> </result>actionpublic InputStream getInPutStream() throws Exception { String filePath = (String) ActionContext.getContext().getSession().get( "filePath"); String fileName = this.fileName; inputPath = (filePath + "/" + fileName).replace("\\", "/"); File f = new File(inputPath); InputStream is = new FileInputStream(f); return is; }public String downLoadFiles() throws Exception { return "success"; } 三个地方配置编码1) JSP页面的pageEncoding="GBK",2) TOMCAT server.xml中的加入URIEncoding="GBK"3)struts常量 <constant name="struts.i18n.encoding" value="GBK" />contentType不需要配置这样就行了。<result name="download" type="stream"> <param name="contentDisposition"> attachment;filename="${newname}" </param> <param name="bufferSize">1024</param> <!--<param name="inputName">inputStream</param>--> </result>newname 为你Action中的成员变量方法名为getInputStream()<!--<param name="inputName">inputStream</param>-->可以不用配 因为我是在不知道文件名得前提下<param name="contentDisposition">attachment;filename="${fileName}"</param><param name="inputName">inPutStream</param>filename我是在前台读出传到后台inputstream是我在action中配置获得文件路径的方法 就看struts.xml配置文件和action是没的问题的,你或得InputStream方法,好好检查下public InputStream getInputStream() { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("sheet1"); HSSFRow row = sheet.createRow(6); HSSFCell cell=null; HSSFCellStyle style = wb.createCellStyle(); String[] str={"序号","姓","名","年龄"}; for(int i=0;i<str.length;i++){ cell = row.createCell((short)i); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(str[i]); } /* HSSFCell cell = row.createCell((short) 0); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("序号"); cell = row.createCell((short) 1); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("姓"); cell = row.createCell((short) 2); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("名"); cell = row.createCell((short) 3); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("年龄");*/ List<User> list = this.findAll(); System.out.println("# "+list); for (int i = 0; i < list.size(); ++i) { User user = list.get(i); row = sheet.createRow(i + 7); cell = row.createCell((short) 0); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(i + 1); cell = row.createCell((short) 1); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(user.getFirstname()); cell = row.createCell((short) 2); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(user.getLastname()); cell = row.createCell((short) 3); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(user.getAge()); } //利用流体得到内存中数据的方法一/* String fileName = MakeRandomString.RandomString1(10); fileName = new StringBuffer(fileName).append(".xls").toString(); final File file = new File(fileName); try { OutputStream os = new FileOutputStream(file); wb.write(os); os.close(); } catch (Exception e) { e.printStackTrace(); } InputStream is = null; try { is = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } new Thread(new Runnable() { public void run() { try { Thread.sleep(15000); file.delete(); } catch (InterruptedException e) { e.printStackTrace(); } } } ).start(); return is; */ //利用流体得到内存中数据的方法二 ByteArrayOutputStream os=new ByteArrayOutputStream(1024); try { wb.write(os); } catch (IOException e) { e.printStackTrace(); } /* byte[] b=wb.getBytes();//此方法仅仅只获得HSSFWorkbook中部分的字符 System.out.println(b); InputStream is=new ByteArrayInputStream(b);*/ byte[] b=os.toByteArray(); System.out.println(b); InputStream is=new ByteArrayInputStream(b); return is; }}Action:public InputStream getDownloadFile() { return this.service.getInputStream(); }struts。xml配置文件:<action name="generateExcel" class="generateExcelAction"> <result name="success" type="stream">//你这里估计笔误 <param name="contentType">application/vnd.ms-excel</param> <param name="contentDisposition">attachment;filename="AllUsers.xls"</param> <param name="inputName">downloadFile</param>//红色部分和Action中的getDownloadFile()方法名相互对应的,遵循javabean规范,注意大小写</result></action> java中字符"\"和"/"的正则表达式问题 JAVA 技术交流 QQ 群,诚邀高手,新手 struts1.x的url-pattern问题 cvs如何获取某一时间点的所有代码? 给您磕头了,帮帮小弟吧--在WebLogic上的乱码问题 有关struts的菜问题? 请高手相助. 各位,如何使用事务处理在java可。郁闷中,顺便散分,跟者有分 大侠帮帮忙,赠送1000分 急!关于日期的问题--我把5月31日弄丢了! 高分请教:jms中接收消息时是怎样触发onmessage 事件的 activemq对中文的支持 有点晕哦!!!
<result name="success" type="streamx">
<param name="contentType">application/vnd.ms-excel;charset=ISO8859-1</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="inputName">inPutStream</param>
<param name="bufferSize">4096</param>
</result>action
public InputStream getInPutStream() throws Exception { String filePath = (String) ActionContext.getContext().getSession().get(
"filePath");
String fileName = this.fileName; inputPath = (filePath + "/" + fileName).replace("\\", "/");
File f = new File(inputPath);
InputStream is = new FileInputStream(f); return is;
}public String downLoadFiles() throws Exception { return "success"; }
1) JSP页面的pageEncoding="GBK",
2) TOMCAT server.xml中的加入URIEncoding="GBK"
3)struts常量 <constant name="struts.i18n.encoding" value="GBK" />contentType不需要配置
这样就行了。<result name="download" type="stream">
<param name="contentDisposition">
attachment;filename="${newname}"
</param>
<param name="bufferSize">1024</param>
<!--<param name="inputName">inputStream</param>-->
</result>newname 为你Action中的成员变量
方法名为getInputStream()<!--<param name="inputName">inputStream</param>-->可以不用配
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="inputName">inPutStream</param>
filename我是在前台读出传到后台inputstream是我在action中配置获得文件路径的方法
public InputStream getInputStream()
{
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("sheet1"); HSSFRow row = sheet.createRow(6);
HSSFCell cell=null;
HSSFCellStyle style = wb.createCellStyle();
String[] str={"序号","姓","名","年龄"};
for(int i=0;i<str.length;i++){
cell = row.createCell((short)i);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(str[i]);
}
/* HSSFCell cell = row.createCell((short) 0);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("序号"); cell = row.createCell((short) 1);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("姓"); cell = row.createCell((short) 2);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("名"); cell = row.createCell((short) 3);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("年龄");
*/ List<User> list = this.findAll();
System.out.println("# "+list); for (int i = 0; i < list.size(); ++i)
{
User user = list.get(i);
row = sheet.createRow(i + 7); cell = row.createCell((short) 0);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(i + 1); cell = row.createCell((short) 1);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(user.getFirstname()); cell = row.createCell((short) 2);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(user.getLastname()); cell = row.createCell((short) 3);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(user.getAge());
}
//利用流体得到内存中数据的方法一
/* String fileName = MakeRandomString.RandomString1(10);
fileName = new StringBuffer(fileName).append(".xls").toString();
final File file = new File(fileName); try
{
OutputStream os = new FileOutputStream(file);
wb.write(os);
os.close();
}
catch (Exception e)
{
e.printStackTrace();
} InputStream is = null;
try
{
is = new FileInputStream(file);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
} new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(15000);
file.delete();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
).start();
return is;
*/
//利用流体得到内存中数据的方法二
ByteArrayOutputStream os=new ByteArrayOutputStream(1024);
try {
wb.write(os);
} catch (IOException e) {
e.printStackTrace();
}
/* byte[] b=wb.getBytes();//此方法仅仅只获得HSSFWorkbook中部分的字符
System.out.println(b);
InputStream is=new ByteArrayInputStream(b);
*/
byte[] b=os.toByteArray();
System.out.println(b);
InputStream is=new ByteArrayInputStream(b);
return is;
}
}Action:
public InputStream getDownloadFile()
{
return this.service.getInputStream();
}struts。xml配置文件:
<action name="generateExcel" class="generateExcelAction">
<result name="success" type="stream">//你这里估计笔误
<param name="contentType">application/vnd.ms-excel</param>
<param name="contentDisposition">attachment;filename="AllUsers.xls"</param>
<param name="inputName">downloadFile</param>//红色部分和Action中的getDownloadFile()方法名相互对应的,遵循javabean规范,注意大小写
</result>
</action>