Java中用Struts2做下载功能遇到的问题

本文介绍了解决Struts2框架中文件下载时出现的InputStream异常问题。通过调整路径设置和采用不同方法获取输入流,成功实现了文件的正常下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用Struts2框架做下载时,一直报异常

java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [inputStream] 

action配置如下:

<action name="downFileAction" class="edu.fileManager.Action.DownFileAction">
			<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="${downloadFileName}"
				</param>
				<param name="bufferSize">40960</param>
			</result>
		</action>

经查原因在于action的java文件中的getInputStream()方法不能正确返回InputStream流,ServletActionContext.getServletContext().getResourceAsStream(String path)获取到的返回为null,文件名path存在问题。

ServletContext. getResourceAsStream(String path):默认从当前的WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓。

public InputStream getInputStream() throws FileNotFoundException{
	DB mysql = new DB();
	String filename = mysql.returnFile(request, "fileName");
		
	return ServletActionContext.getServletContext().getResourceAsStream("save/"+filename);
}
将path更改为("/save/"+filename)或("save/"+filename)后问题解决。

还可以直接使用FileInputStream(String path)方法获取InputStream,此处的path必须是绝对路径。

public InputStream getInputStream() throws FileNotFoundException{
		DB mysql = new DB();
		String realpath = mysql.returnFile(request, "filePath");
		InputStream in = new FileInputStream(realpath);
		return in;
}
此处的realpath为绝对路径。

文件目录结构如下图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值