今天在用struts2就行文件下载时出现如下错误:

    Servlet.service() for servlet default threw exception   java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [imageStream] in the invocation stack. Check the <param name="inputName"> tag specified for this action.   at org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:189)   at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)   at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)   at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)   at com.best.top.validate.TopInterceptor.intercept(TopInterceptor.java:47)   at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)   at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)   at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)   at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)   at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)   at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)   at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)  

说实话这个提示真有误导人的嫌疑,刚开始还以为是名称不对,估计一般人看到这个提示都这样想。然后查看StreamResult的源代码才发现是因为InputStream为null的缘故,汗一个。看下源码:

if (inputStream == null) {   // Find the inputstream from the invocation variable stack  inputStream = (InputStream) invocation.getStack().findValue(conditionalParse(inputName, invocation));   }   if (inputStream == null) {   String msg = ("Can not find a java.io.InputStream with the name [" + inputName + "] in the invocation stack. " +   "Check the <param name=\"inputName\"> tag specified for this action.");   LOG.error(msg);   throw new IllegalArgumentException(msg);   }  

大家如果也碰到此类问题,直接打印

InputStream in=ServletActionContext.getServletContext().getResourceAsStream(realPath);
System.out.println(in);

如果打印为NULL的话,恭喜您,问题得以解决,问题的原因是这个流的realPath路径错误,还没明白的往下看,怪呀,我的配置应该没错呀

页面上:

<a href="fileDownload.action?fileName=<s:property value ="imageName" />">下载此图片</a>

struts.xml中:

<!-- 文件下载,支持中文附件名 --><action name="fileDownload"class="com.test.action.filedown.FileDownloadAction"><result name="success" type="stream"><!-- 动态文件下载的,事先并不知道未来的文件类型,那么我们可以把它的值设置成为:application/octet-stream;charset=ISO8859-1 ,注意一定要加入charset,否则某些时候会导致下载的文件出错; --><param name="contentType">application/octet-stream;charset=ISO8859-1</param><param name="contentDisposition">attachment;filename="${downloadFileName}"</param><!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性对应action类中的方法 getDownloadFileName() 其中特殊的代码就是${downloadFileName},它的效果相当于运行的时候将action对象的属性的取值动态的填充在${}中间的部分,我们可以认为它等价于+action. getDownloadFileName()。 --><param name="inputName">inputStream</param><param name="bufferSize">4096</param></result></action>

action中:

private String fileName;// 初始的通过param指定的文件名属性 set get/** 文件名 转换编码 防止中文乱码*/
public String getDownloadFileName() {String fileName=ServletActionContext.getRequest().getParameter("fileName");String downFileName = fileName;try {downFileName = new String(downFileName.getBytes(), "ISO8859-1");} catch (Exception e) {e.printStackTrace();}return downFileName;
}
//下载的流
public InputStream getInputStream() {String name=this.getDownloadFileName();
//  String realPath=ServletActionContext.getServletContext().getRealPath("/uploadImages")+ "/"+name; 路径错误String realPath="/uploadImages/"+name;InputStream in=ServletActionContext.getServletContext().getResourceAsStream(realPath);if(null==in){System.out.println("Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the <param name=\"inputName\"> tag specified for this action.检查action中文件下载路径是否正确.");  }return ServletActionContext.getServletContext().getResourceAsStream(realPath);
}@Override
public String execute() throws Exception {return SUCCESS;
}

转载于:https://www.cnblogs.com/longshiyVip/p/4958668.html

struts2文件下载出现Can not find a java.io.InputStream with the name的错误相关推荐

  1. Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack.

    1.错误描述 八月 14, 2015 4:22:45 下午 com.opensymphony.xwork2.util.logging.jdk.JdkLogger error 严重: Exception ...

  2. Java IO: InputStream

    转载自   Java IO: InputStream 译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) InputStream类是Java I ...

  3. java.io.IOException: Too many open files错误解决方案

    java.io.IOException: Too many open files错误解决方案 参考文章: (1)java.io.IOException: Too many open files错误解决 ...

  4. java.io.StreamCorruptedException: invalid type code: AC错误的解决方法

    问题描述: 在向一个文件写入可序列化对象时,每次只想向文件的末尾添加一个可序列化的对象,于是使用了FileOutputStream(文件名,true)间接的构建了ObjectOutputStream流 ...

  5. java struts2 文件下载,Struts2文件下载

    一个简单的利用struts2做文件下载的demo-- 首先配好struts: web.xml xmlns="http://java.sun.com/xml/ns/j2ee" xml ...

  6. Struts2 文件下载

    配置xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC& ...

  7. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  8. java urlconn 下载慢_使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法...

    import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAc ...

  9. 你真的以为了解java.io吗 呕心沥血 绝对干货 别把我移出首页了

    文章结构 1 flush的使用场景 2 一个java字节流,inputstream 和 outputstream的简单例子 3 分别测试了可能抛出java.io.FileNotFoundExcepti ...

最新文章

  1. 树莓派GPIO驱动原理
  2. 小程序上传图本地片wx.chooseImage
  3. cursor is oracle 日期_Oracle时间计算------日期格式参数含义说明
  4. Java 文件上传组件 Apache Commons FileUpload 应用指南(二)——FileUpload如何工作?
  5. lua——赢三张牌型处理相关算法(上)——牌值数据
  6. Navicat实用功能:数据备份与结构同步
  7. 你是否真的适合搞NDK开发?
  8. 阶段3 3.SpringMVC·_05.文件上传_6 文件上传之跨服务器上传代码
  9. FANUC Robot 编程教程
  10. 北京“曼联梦剧场”项目开业,迎接中国球迷与家庭
  11. 搜索关键词采集YouTube视频字幕
  12. b B kb kB kbps KBps 换算
  13. Vulcan 团队信息
  14. JDK8新特性-Lambda
  15. 联发科MT6139射频处理器工作原理分析
  16. 阿里云ECS数据迁移到阿里云OSS
  17. 数据挖掘的过程有哪些
  18. 易语言和c语言语法哪个接近点,易语言如果真、如果和判断知识点总结
  19. 聊天机器人中的深度学习
  20. 贴片电阻电容的封装形式及尺寸

热门文章

  1. 目标检测之行人检测(Pedestrian Detection)基于hog(梯度方向直方图)--- 梯度直方图特征行人检测、人流检测2...
  2. Windows下的文件类型
  3. outlook地址薄导入到FOXMAIL
  4. KDEWin Installer 0.9.8-1发布
  5. 使用火炬之光资源(转)
  6. 必须对手机内置业务制定规范防止后门
  7. 一次“炼狱”般的电脑维护
  8. Kubernetes1.13.1部署Kuberneted-dashboard v1.10.1
  9. ZigBee TI ZStack CC2530 2.4 IAR软件版本
  10. Fedora的ifconfig命令