struts文件上传和下载

来源:互联网 发布:在知乎工作 编辑:程序博客网 时间:2024/05/19 05:38

文件上传

  回顾文件上传:
struts提交的文件上传组件来上传文件:
前台:
         1.提交方式POST
2.表单类型 multipart/form-data
3.input type=file

后台:
Apche提供的FileUpload组件
核心类:
FileItemFactoryFileItem的工厂
ServletFileUpload Servlet中文件上传的核心类
FileItem 封装了上传的表单文件项的信息


Struts的文件上传:
文件上传拦截器帮助我们完成了文件上传的功能:
<interceptor
name = "fileUpload"
class="org.apche,struts2.interceptor.FuleUploadceptor"/>





文件上传细节:
文件大小限制
Strust默认支持的文件上传最大是2M

. 通过常量修改:

<!-- 注意: action 的名称不能用关键字"fileUpload" -->

<action name="fileUploadAction" class="cn.itcast.e_fileupload.FileUpload">    <!-- 限制运行上传的文件的类型 -->    <interceptor-ref name="defaultStack">        <!-- 限制运行的文件的扩展名 -->        <param name="fileUpload.allowedExtensions">txt,jpg,jar</param>        <!-- 限制运行的类型   【与上面同时使用,取交集】        <param name="fileUpload.allowedTypes">text/plain</param>        -->    </interceptor-ref>    <result name="success">/e/success.jsp</result>    <!-- 配置错误视图 -->    <result name="input">/e/error.jsp</result></action>


<!-- 一、全局配置 --><!-- 0. 请求数据编码 --><constant name="struts.i18n.encoding" value="UTF-8"/><!-- 1. 修改Struts默认的访问后缀 --><constant name="struts.action.extension" value="action,do,"></constant><!-- 2. 修改xml自动重新加载 --><constant name="struts.configuration.xml.reload" value="true"/><!-- 3. 开启动态方法调用 (默认不开启)--><constant name="struts.enable.DynamicMethodInvocation" value="true"/><!-- 4. 修改上传文件的最大大小为30M --><constant name="struts.multipart.maxSize" value="31457280"/>

限制上传文件的运行类型

需求:只运行txt/jpg后缀的文件

错误提示

当文件上传出现错误时后,struts内部会返回input视图(错误视图)。所以就需要我们再struts.xml中配置input视图对应的错误页面!


Struts的文件下载

文件下载两种方式:

方式1:通过response对象向浏览器写入字节流数据;设置下载响应头

方式2:struts方式



<action name="down_*" class="cn.itcast.e_fileupload.DownAction" method="{1}">    <!-- 列表展示 -->    <result name="list">/e/list.jsp</result>    <!-- 下载操作 -->    <result name="download" type="stream">        <!-- 运行下载的文件的类型:指定为所有的二进制文件类型 -->        <param name="contentType">application/octet-stream</param>        <!-- 对应的是Action中属性: 返回流的属性【其实就是getAttrInputStream()-->        <param name="inputName">attrInputStream</param>        <!-- 下载头,包括:浏览器显示的文件名 -->        <param name="contentDisposition">attachment;filename=${downFileName}</param>        <!-- 缓冲区大小设置 -->        <param name="bufferSize">1024</param>    </result></action>


<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
/** * Created by 朱博文 on 2017/6/21. */
 /*************1. 文件上传*********************/
public class FileUpLoad extends ActionSupport{ //对接表单<input type="file" name="file1"> private File file1; //文件名 private String file1Filename; //文件类型 private String file1ContentType; public void setFile1(File file1) { this.file1 = file1; } public void setFile1Filename(String file1Filename) { this.file1Filename = file1Filename; } public void setFile1ContentType(String file1ContentType) { this.file1ContentType = file1ContentType; } @Override public String execute() throws Exception { /** * 拿到文件看是否上上传成 */ //把文件上传到upload目录 //获取上传目录路径 String path = ServletActionContext.getServletContext().getRealPath("/upload");// 创建目标文件对象 File destFile = new File(path,file1Filename); //把上传的文件拷贝到目标文件中 FileUtils.copyFile(file1,destFile); System.out.println("FileUplaod.execute()"); return SUCCESS; }}


   /*************2. 文件下载*********************/    // 1. 获取要下载的文件的文件名    private String fileName;    public void setFileName(String fileName) {        // 处理传入的参数中问题(get提交)        try {            fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");        } catch (UnsupportedEncodingException e) {            throw new RuntimeException(e);        }        // 把处理好的文件名,赋值        this.fileName = fileName;    }    //2. 下载提交的业务方法 (struts.xml中配置返回stream)    public String down() throws Exception {        return "download";    }    // 3. 返回文件流的方法    public InputStream getAttrInputStream(){        return ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName);    }    // 4. 下载显示的文件名(浏览器显示的文件名)    public String getDownFileName() {        // 需要进行中文编码        try {            fileName = URLEncoder.encode(fileName, "UTF-8");        } catch (UnsupportedEncodingException e) {            throw new RuntimeException(e);        }        return fileName;    }}

原创粉丝点击