求助各位大神!struts2文件下载 360浏览器报错 求助!!!!

kk945600 2013-01-06 05:16:14
struts2文件上传、下载的功能,上传没有问题,但是360浏览器下载已经上传文件的时候,后台抛出异常不能下载!!这要怎么解决!!!
360中很小的文件能下载,但后台有异常
360中大一些的文件就不能下载了,

360浏览器下载时后台抛的异常:(不知道为什么 文件名后面少了一个字符)

在ie8中什么问题都没有





代码如下:

文件下载jsp页面

<form action="downloadFile.action" method="post" target="_parent">
<input type="text" name="fileName" value="<s:property value ="fileFileName" />"/>
<input type="submit" value="下载此文件"/>
</form>


struts配置文件action:

<action name="downloadFile" class="com.test.filedownload.DownloadAction2" method="downLoadFile">
<result name="success" type="stream">
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">
attachment;filename="${fileName}"
</param>
<param name="bufferSize">2048</param>
</result>
<result name="input">/fileDownloadFail.jsp</result>
</action>


下载文件Action

package com.test.filedownload;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction2 extends ActionSupport
{
private String fileName;

public String downLoadFile() throws Exception {
return "success";
}

public InputStream getInputStream() throws Exception {
String realPath = "/upload/"+fileName;
System.out.println(realPath);

// ServletActionContext.getResponse().setHeader(
// "Content-Disposition",
// "attachment; filename="
// + java.net.URLEncoder
// .encode(this.fileName, "utf-8"));

this.fileName = java.net.URLEncoder.encode(this.fileName, "utf-8");

return ServletActionContext.getServletContext().getResourceAsStream(realPath);
}

public String getFileName() {
return fileName;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}
}


360浏览器下载时后台抛的异常:(不知道为什么 文件名后面少了一个字符)

fileFileName: Visual+C+++6.0(支持win7).zip
/upload/Visual+C+++6.0(支持win7).zip
/upload/Visual+C+++6.0(支持win7).zi
2013-1-6 17:23:19 com.opensymphony.xwork2.util.logging.jdk.JdkLogger error
严重: Exception occurred during processing request: null
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:388)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:462)
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:334)
at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:283)
at org.apache.catalina.connector.CoyoteOutputStream.close(CoyoteOutputStream.java:108)






...全文
228 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
star890 2013-02-25
  • 打赏
  • 举报
回复
我这里以前也做了个关于struts2的文件下载的demo 这里提供以下关键的代码吧 希望可以帮到你 //filepath为文件在服务器上的地址 public InputStream getDownloadFile() { InputStream iso = null; try { iso = new FileInputStream(filePath); } catch (FileNotFoundException e) { e.printStackTrace(); } return iso; } //跳转的action 方法 public String exportGiftOrder() throws IOException{ return "list2"; } struts2.xml配置文件 <action name="*GiftOrder" method="{1}GiftOrder" class="com.huatang.feiyi.mall.action.GiftOrderAction"> <result name="list2" type="stream"> <param name="contentType">application/octet-stream</param> <!-- 要有相对应的getDownloadFile()方法返回值是 InputStream --> <param name="inputName">downloadFile</param> <param name="contentDisposition">attachment;filename="${filePath}"</param> <param name="bufferSize">4096</param> </result> </action>
qingyuan18 2013-02-23
  • 打赏
  • 举报
回复
如果你是用流方式上传下载,那就是把这部分工作丢给浏览器了,必然会遇到不同浏览器版本问题 建议用apache的common包,里面对上传下载封装得很好
茜茜你好坏 2013-02-23
  • 打赏
  • 举报
回复
为什么要用360浏览器呢?做java web开发还是用IE和Firefox好,试试其他的浏览器吧,360只适合浏览网站,不适合开发用的
  • 打赏
  • 举报
回复
引用 1 楼 zsmj0713 的回复:
为什么要用360浏览器呢?做java web开发还是用IE和Firefox好,试试其他的浏览器吧,360只适合浏览网站,不适合开发用的
觉得可能是这个原因

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧