struts2文件下载 出现Can not find a java.io.InputStream with the name的错误
成功代码:
前台界面jsp: <a style="text-decoration:none;" href="<%=path %>/main/frontNewsAction_downloadFile.action?fileName=<s:property value="fileTitle"/>">下载</a> Action文件:
private String fileName;//get set方法
public String getDownloadFileName() {
String downFileName = fileName;
try {
downFileName = new String(downFileName.getBytes(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
return downFileName;
} //下载的流
public InputStream getInputStream() throws FileNotFoundException {
String name=this.getDownloadFileName();
File file = new File(ServletActionContext.getServletContext().getRealPath("/file")+"/"+name);
InputStream inputStream = new FileInputStream(file);
return new FileInputStream(file);
} // 下载
public String downloadFile() throws Exception {
return "downloadFile";
}
<!-- 文件下载 -->
<result name="downloadFile" type="stream">
<param name="contentType">
application/octet-stream;charset=utf-8
</param>
<param name="contentDisposition">
attachment;filename="${downloadFileName}"
</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">4096</param>
</result>
出现错误时是由于在action中的public InputStream getInputStream()方法返回值为:return ServletActionContext.getServletContext().getResourceAsStream(ServletActionContext.getServletContext().getRealPath("/file")+"/"+name);
造成的异常
学习内容:
配置文件:
<!-- 文件下载,支持中文附件名 -->
   <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">
<!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性
      对应action类中的方法 getDownloadFileName()
其中特殊的代码就是${downloadFileName},它的效果相当于运行的时候将action对象的属性的取值动态的填充在${}中间的部分,我
们可以认为它等价于+action. getDownloadFileName()。 -->
      attachment;filename="${downloadFileName}"
     </param>
     <param name="inputName">inputStream</param>
     <param name="bufferSize">4096</param>
    </result>
   </action>
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;
}
struts2文件下载 出现Can not find a java.io.InputStream with the name的错误的更多相关文章
- struts2文件下载出现Can not find a java.io.InputStream with the name的错误
		今天在用struts2就行文件下载时出现如下错误: Servlet.service() for servlet default threw exception java.lang.IllegalArg ... 
- 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 严重: Excepti ... 
- java.io.StreamCorruptedException: invalid type code: AC错误的解决方法
		问题描述: 在向一个文件写入可序列化对象时,每次只想向文件的末尾添加一个可序列化的对象,于是使用了FileOutputStream(文件名,true)间接的构建了ObjectOutputStream流 ... 
- 【java】io流之字节输入流:java.io.InputStream类及子类java.io.FileInputStream
		package 文件操作; import java.io.File; import java.io.FileInputStream; import java.io.IOException; impor ... 
- Error: Default interface methods are only supported starting with Android N (--min-api 24): java.io.InputStream org.apache.poi.sl.usermodel.ObjectShape.readObjectData()
		项目运行的时候,如果报错 Error: Default interface methods are only supported starting with Android N (--min-api ... 
- 关于Java IO InputStream 的一点整理!
		程序的开发其中一直在用文件的读写.可是对于java其中输入流以及输出流仅仅是会用不理解,一直以来想搞清楚其,可是一直没有运行(悲剧).今天早上抽出半个小时通过JDK API1.6.0中文版帮助逐步的了 ... 
- java io InputStream 转 byte
		InputStream is ; ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] b = new byte[1024] ... 
- Struts2文件下载
		1). Struts2 中使用 type="stream" 的 result 进行下载 2). 可以为 stream 的 result 设定如下参数 contentType: 结果 ... 
- Struts2 文件下载
		使用Struts2做一个简单的文件下载. 首先,导包,写配置文件就不说了. 进入主题. 文件下载操作类:FileDownload.java import java.io.InputStream; im ... 
随机推荐
- [转]Jquery Ajax用法
			原文地址:http://www.php100.com/html/program/jquery/2013/0905/6004.html jQuery学习之jQuery Ajax用法详解 来源: 时间 ... 
- UVA 11294 Wedding(2-sat)
			2-sat.不错的一道题,学到了不少. 需要注意这么几点: 1.题目中描述的是有n对夫妇,其中(n-1)对是来为余下的一对办婚礼的,所以新娘只有一位. 2.2-sat问题是根据必然性建边,比如说A与B ... 
- Java [Leetcode 202]Happy Number
			题目描述: Write an algorithm to determine if a number is "happy". A happy number is a number d ... 
- 【jQuery】鼠标接触按钮后改变图片
			<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ... 
- 一步一步ITextSharp 低级操作函数使用
			首先说一下PDF文档的结构: 分为四层,第一层和第四层由低级操作来进行操作,第二层.第三层由高级对象操作 第一层操作只能使用PdfWriter.DirectContent操作,第四层使用DirectC ... 
- NPlot开源画图类
			一.net下的图表控件NPlot的基本用法 NPlot的基本用法 图表控件一直是很难找的,特别是免费又强大的.NPlot是一款非常难得的.Net平台下的图表控件,能做各种曲线图,柱状图,饼图,散 ... 
- [Everyday Mathematics]20150202
			设 $f:\bbR^2\to \bbR$ 为连续函数, 且满足条件 $$\bex f(x+1,y)=f(x,y+1)=f(x,y),\quad\forall\ (x,y)\in \bbR^2. \ee ... 
- Microsoft-pubs(图书馆管理系统)-数据库设计
			ylbtech-DatabaseDesgin:微软提供-pubs(图书馆管理系统)-数据库设计 1.A,数据库关系图 1.B,数据库设计脚本 -- ======================== ... 
- Brackets sequence
			题意: 给你一个括号序列(有中小括号),求出以给定序列为子序列的最小合法括号序列. 分析: 非常经典,以前做过相似一道题,用区间dp,但怎么把这个序列求出来没想出来. dp[i][j]表示区间i-j是 ... 
- TortoiseHg简单的入门使用说明
			参考资料: 互普的 TortoiseHg使用说明_百度文库 Mercurial(Hg)基本操作 - Tim Gong - 博客园 Mercurial与TortoiseHg使用入门教程(转) - mee ... 
