我做了个struts2的文件下载功能,有问题,请大神帮忙解决

我在前台给文件一个id,单击事件通过ajax请求对应的下载文件action在action中定义3个变量fileName,filePath,id,getter和setter... 我在前台给文件一个id,单击事件通过ajax请求对应的下载文件action
在action中定义3个变量fileName ,filePath,id,getter和setter方法
在getDownFile(){
Attachment att = attService.getAttachment(id);//调用service层的方法,查询出对应的id

this.fileName = att.getFileName();//获取文件名

this.filePath = att.getFilePath();//获取路径

File fdesc = new File(filePath +fileName);

InputStream is = new FileInputStream (fdesc);

return is;

}
fileName 和filePath 是确定可以取到的,而且struts.xml配置文件也没有什么问题,但是下载不了,请问是什么造成的!
展开
 我来答
wenkuhulu
2012-09-07 · TA获得超过176个赞
知道小有建树答主
回答量:267
采纳率:100%
帮助的人:195万
展开全部
既然你写public InputStream getDownFile(){} 那你在struts.xml中就应该写<result><param name="inputName">downFile</param>,先检查这里。

除此,在struts.xml中配置
<param name="contentType">image/gif</param>

<param name="contentDisposition">filename="struts.gif"</param>
这两个当然也可以在action中设置,写在getDownFile里面。
(用response
response.setHeader("content-Type", "image/gif");
//这里一下载图片为例,如果是不限制文件类型,image/gif改为application/octet-stream
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);


希望你能把tomcat抛出的异常贴出来,这样,大家才能更清楚的看到你的错误信息。
追问
java.lang.classcastException:java.io.FileInputStream cannot be cast to java.lang.string

这个异常,知道怎么回事吗?
追答
File fdesc = new File(filePath +fileName);

InputStream is = new FileInputStream (fdesc);

这2个对象都正确吗?输出 is 试试。如果is是InputStream或FileInputStream表示正确。

另外,
1 你的getDownFile()返回类型是?因为异常信息是说“io输入流不能转换成字符串类型”

2 确定你的struts.xml是downFile这样写?
帐号已注销
2012-09-06 · TA获得超过335个赞
知道小有建树答主
回答量:427
采纳率:0%
帮助的人:358万
展开全部
应该还有一个 OutputStream吧?只有InputStream那只是读取文件流,OutputStream才是向外输出流的吧。
追问
struts2 这些 可以再struts.xml中配置好了吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
badboy4539
2012-09-07 · TA获得超过219个赞
知道小有建树答主
回答量:329
采纳率:100%
帮助的人:204万
展开全部
public void getDownFile(){
try{
Attachment att = attService.getAttachment(id);//调用service层的方法,查询出对应的id

this.fileName = att.getFileName();//获取文件名

this.filePath = att.getFilePath();//获取路径

File fdesc = new File(filePath +fileName);

HttpServletResponse response = ServletActionContext.getResponse(); //获取response对象
response.addHeader("Content- Disposition","attachment;filename=" + URLEncoder.encode("文件名称","UTF-8"));//设置文件名称
OutputStream out = new BufferedOutputStream(response.getOutputStream());//获取输出流
InputStream is = new BufferedInputStream(new FileInputStream(fdesc));//将文件读取
byte[] b = new byte[is.available()];
is.read(b);
is.close();
out.write(b);//向页面输出(即是下载)
out.close();
}catch(Exception e){
e.printStackTrace()
}
}
追问
那配置文件中还要写什么呢?

还需要在配置文件中配置吗?
那也不对啊,,。。。下载请求的action怎么知道执行这个方法呢?可否说明下struts.xml的配置,小弟感激不尽啊!
追答
struts.xml里面不需要配置什么其他的了
大概类似于这样吧

不过方法名最好不要用get开头,一般类里的属性生成get和set方法是有可能会有冲突。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式