struts实现文件上传与下载

来源:互联网 发布:深圳户口 知乎 编辑:程序博客网 时间:2024/06/11 02:47

一.实现上传
1.配置上传的up.xml

<struts>    <package name="MyStruts"  extends="struts-default">        <!-- 全局返回集 -->        <global-results>            <!-- 成功界面 -->            <result name="data">/success.jsp</result>            <!--错误界面-->            <result name="input">/error.jsp</result>        </global-results>        <!--action name不能用关键字fileUpload-->        <action name="file" class="com.struts.action.FileAction" method="execute">              <interceptor-ref name="defaultStack">                <param name="file"></param>                    <!-- 允许上传的文件类型 -->                <param  name="fileUpload.allowedExtensions">txt,jpg                </param>            </interceptor-ref>        </action>    </package> </struts>

2.写一个FileAction类(对应的get和set方法省略)

    //上传的文件对象    private File file1;    //上传的文件名  必须是上传表单的name属性+FileName    private String file1FileName;    //上传的文件类型  必须是上传表单的name属性+FileType    private String file1FileType;    @Override    public String execute() throws Exception{        //设置上传文件的路径        String path =ServletActionContext.getServletContext().getRealPath("/upload");        File tarFile=new File(path,file1FileName);        //将文件copy到指定的路径        FileUtils.copyFile(file1, tarFile);        System.out.println("上传成功");        return "data";    }

3.前端代码选择要上传的文件

 <body>      <form action="${pageContext.request.contextPath}/file" method="post" enctype="multipart/form-data">        <input type="file" name="file1">        <input type="submit" name="submit" value="submit">    </form>  </body>

二.实现下载
1.配置下载的down.xml(这个模板在struts的api中可以找到查找StreamResult)

<struts>    <package name="downFile"  extends="struts-default">        <action name="down_" class="com.struts.action.FileDownAction" method="down">               <result name="download" type="stream">              <!-- 所有的二进制文件(可以自己自定义为txt等) -->               <param name="contentType">application/octet-stream</param>               <!--对应的action中的属性getAttriStream()  -->               <param name="inputName">attriInputStream</param>               <!-- 下载头包括浏览器显示的名称 -->               <param name="contentDisposition">attachment;filename=${fileName}</param>               <param name="bufferSize">1024</param>             </result>        </action>        <action name="list_"      class="com.struts.action.FileDownAction" method="list">               <result name="list">/list.jsp</result>        </action>    </package> </struts>

2.编写下载的FileDownACtion类

public class FileDownAction extends ActionSupport {    private static final long serialVersionUID = 1L;    private InputStream attriInputStream;    private String fileName;    //显示下载列表    public String list(){        //得到文件目录        String path=ServletActionContext.getServletContext().getRealPath("/upload");        //,目录对象        File file=new File(path);        //得到所有要下载的文件名        String []fileNames=file.list();        ActionContext ac=ActionContext.getContext();        Map<String, Object> request = ac.getContextMap();        request.put("fileNames", fileNames);        return "list";    }    //1获取要下载的文件名        public void setFileName(String fileName) {            try {                    //传入中文参数的编码处理                fileName=new String(fileName.getBytes("ISO8859-1"),"utf-8");            } catch (UnsupportedEncodingException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            this.fileName = fileName;        }    //2下载提交的方法(在down.xml中返回stream)    public String down(){        return "download";    }    //3返回文件流的方法    public InputStream getAttriInputStream(){        attriInputStream=ServletActionContext.getServletContext().getResourceAsStream("/upload/"+fileName);        return attriInputStream;    }    //4浏览器显示的文件名        public String getFileName() {            try {                fileName=URLEncoder.encode(fileName, "utf-8");            } catch (UnsupportedEncodingException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            return fileName;        }}

3.下载的前端代码

<body>    <table name="downFile" align="center" border="1px solid">        <tr><td><th>文件下载列表</th><td></tr>        <tr>        <td>编号</td>        <td>文件名</td>        <td>操作</td>        </tr>    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    <c:forEach var="fileName" items="${fileNames }" varStatus="vs">        <tr>            <td>${vs.count}</td>            <td>${fileName}</td>            <td>            <!-- 构建url -->                <c:url var="url" value="down_">                    <c:param name="fileName" value="${fileName}"></c:param>                </c:url>                <a href="${url}">下载</a>            </td>        </tr>    </c:forEach>    </table>  </body>

最后在struts.xml中加载配置文件

          "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>    <!-- 开发模式 -->    <constant name="struts.devMode" value="true"></constant>    <include file="constant.xml"></include>    <include file="com/oracle/action/admin.xml"></include></struts>

流程

原创粉丝点击