我做了个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配置文件也没有什么问题,但是下载不了,请问是什么造成的! 展开
在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配置文件也没有什么问题,但是下载不了,请问是什么造成的! 展开
展开全部
既然你写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抛出的异常贴出来,这样,大家才能更清楚的看到你的错误信息。
除此,在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这样写?
展开全部
应该还有一个 OutputStream吧?只有InputStream那只是读取文件流,OutputStream才是向外输出流的吧。
追问
struts2 这些 可以再struts.xml中配置好了吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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()
}
}
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方法是有可能会有冲突。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询