我用struts action 下载文件
当用户点击“保存”时没有问题可以正常下载,
当用户点击“取消”时就发生异常 public ActionForward fileDownAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
System.out.println("进入执行下载的action"); //调试用
response.setCharacterEncoding("iso-8859-1");
response.setContentType("application/x-msdownload");
String fileid = request.getParameter("id");
String filename = request.getParameter("filename");
String endname = filename.substring(filename.lastIndexOf("."));
String filepath = request.getRealPath("");
filepath += "\\FILES\\";
byte b[] = new byte[100];
File file = new File(filepath, filename);
try {
response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso-8859-1"));
OutputStream outstream = response.getOutputStream();
FileInputStream in = new FileInputStream(file);
int n = 0;
while ((n = in.read(b)) != -1) {
outstream.write(b, 0, n);
}
in.close();
outstream.close();
} catch (Exception e) {
throw new RunTimeException("出现异常",e);
// e.printStackTrace();
}
//return mapping.findForward("fileDown");
return null;
} 异常是: java.net.SocketException: Connection reset by peer: socke
t write error
at org.apache.coyote.tomcat5.OutputBuffer.doFlush(OutputBuffer.java:331) at org.apache.coyote.tomcat5.OutputBuffer.flush(OutputBuffer.java:297)
at org.apache.coyote.tomcat5.CoyoteOutputStream.flush(CoyoteOutputStream.java:85)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:124)
... ... 我的理解,应该是用户点击取消时,response.getOutputStream()已经关闭
所以继续写入数据就会出错,是不是这样啊? 请教,怎么解决这个问题???
另外一个问题:单击的时候会出现迅雷下载对话框,如果选择用迅雷下载,下载的文件名乱码和文件为空?
当用户点击“保存”时没有问题可以正常下载,
当用户点击“取消”时就发生异常 public ActionForward fileDownAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
System.out.println("进入执行下载的action"); //调试用
response.setCharacterEncoding("iso-8859-1");
response.setContentType("application/x-msdownload");
String fileid = request.getParameter("id");
String filename = request.getParameter("filename");
String endname = filename.substring(filename.lastIndexOf("."));
String filepath = request.getRealPath("");
filepath += "\\FILES\\";
byte b[] = new byte[100];
File file = new File(filepath, filename);
try {
response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso-8859-1"));
OutputStream outstream = response.getOutputStream();
FileInputStream in = new FileInputStream(file);
int n = 0;
while ((n = in.read(b)) != -1) {
outstream.write(b, 0, n);
}
in.close();
outstream.close();
} catch (Exception e) {
throw new RunTimeException("出现异常",e);
// e.printStackTrace();
}
//return mapping.findForward("fileDown");
return null;
} 异常是: java.net.SocketException: Connection reset by peer: socke
t write error
at org.apache.coyote.tomcat5.OutputBuffer.doFlush(OutputBuffer.java:331) at org.apache.coyote.tomcat5.OutputBuffer.flush(OutputBuffer.java:297)
at org.apache.coyote.tomcat5.CoyoteOutputStream.flush(CoyoteOutputStream.java:85)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:124)
... ... 我的理解,应该是用户点击取消时,response.getOutputStream()已经关闭
所以继续写入数据就会出错,是不是这样啊? 请教,怎么解决这个问题???
另外一个问题:单击的时候会出现迅雷下载对话框,如果选择用迅雷下载,下载的文件名乱码和文件为空?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货