一、struts2文件下载核心点
1、struts.xml中 action的配置
讲解:
<action name=" " class=" "> <!-- 指定文件下载目录--> <param name="inputPath">/upload/</param> <result name="success" type="stream"> <param name="contentType">image/gif</param> <!-- <param name="contentType">image/gif</param> <param name="contentType">application/zip</param> <param name="contentType">text/plain</param> <param name="contentType">text/html</param> --> <!-- 为action创建了属性targetFile,其类型为InputStream, 其值是由action中public InputStream getTargetFileStream() 方法注入得到的 --> <param name="inputName">targetFileStream</param> <!--直接打开预览--> <param name="contentDisposition">filename="download.gif"</param> <!--打开下载框 <param name="contentDisposition">attachment;filename=${fileName}</param> --> <param name="bufferSize">4096</param> </result> </action>
2、获取输入流
//action中的业务逻辑
//获得输入流方法
public InputStream getTargetFileStream()
{
InputStream is = null;
String path = ServletActionContext.getServletContext().getRealPath("/upload/liucheng");
is=UpDownLoadFile.getFileInputStream(path, fileName);
return is;
}
二、示例
1、struts.xml文件配置
<package name="ssj" namespace="/ssj" extends="struts-default">
<!-- 文件下载 -->
<action name="downLoadFile" class="com.xinfeijinxin.qy.action.ProcessManageAction" method="downLoadFile">
<result type="stream" >
<param name="contentType">text/plain</param>
<param name="contentDisposition">attachment;filename=${fileName}</param>
<param name="inputName">targetFileStream</param>
<param name="bufferSize">4096</param>
</result>
</action>
<!-- 文件删除 -->
<action name="deleteFile" class="com.xinfeijinxin.qy.action.ProcessManageAction" method="deleteFile">
<result name="lcLoad" type="chain">ProcessManage_lcLoad</result>
</action>
</package>
2、DownLoadFileAction.java
//DownLoadFileAction.java代码
/*import ...
*/
public class ProcessManageAction extends BaseAction
{
private String fileName;
//输入流属性注入入口
public InputStream getTargetFileStream()
{
InputStream is = null;
String path = ServletActionContext.getServletContext().getRealPath("/upload/liucheng");
is=UpDownLoadFile.getFileInputStream(path, fileName);
return is;
}
//文件下载请求方法
public String downLoadFile()
{ return SUCCESS;}
//附件删除
public String deleteFile()
{
String path = ServletActionContext.getServletContext().getRealPath("/upload/liucheng");
try {
UpDownLoadFile.deleteFile(fileName, path);
}
catch (IOException e) {e.printStackTrace();}
return "lcLoad";
}
/*getter and setter method
*/
}
3、UpDownLoadFile.java 文件操作工具类
/*import ....
*/
public class ProcessManageAction extends BaseAction
{
// 下载文件
public static InputStream getFileInputStream(String path,String fileName) {
InputStream is = null;
try {
//通过url创建文件输入流
is = new FileInputStream(path+"/"+ fileName);
System.out.println("is"+is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return is;
}
//删除文件
public static void deleteFile(String fileName,String realPath) throws IOException
{
System.out.println("realpath: "+realPath);
File file=new File(realPath+"/"+fileName);
FileUtils.deleteQuietly(file);
}
}
3、downFile.jsp
<a href="ssj/downLoadFile.action?fileName=${fileName }"><span class="STYLE1">下载</span></a>
<a href="ssj/deleteFile.action?fileName=${fileName }"><span class="STYLE1">删除</span></a>