• Struts2 实现文件上传和下载


    实现上传功能

    Struts2实际上是使用的commons fileupload 组件,所以记得导包哦。

    1.首先你应该有一个上传页面

    <!-- file的name属性与action中的File类型属性保持一致,用于封装File控件对应的文件内容 -->
            <s:file name="upload" label="选择文件"></s:file>

    2.然后创建一个文件上传的XXXaction

    public class UploadAction extends ActionSupport implements ModelDriven<File> {
    
        // 封装上传文件属性
        private File upload;
        // 封装上传文件的类型
        private String uploadContentType;
        // 封装生成文件名称
        private String uploadFileName;
        // 获取文件上传的路径
        private String savePath;
    
        @Override
        public String execute() throws Exception {
            // 准备一个byte数组
            byte[] buffer = new byte[1024];
            // 读取文件
            FileInputStream fis = new FileInputStream(getUpload());
            // 保存文件,并设置保存目录路径
            FileOutputStream fos = new FileOutputStream(getSavePath() + "\"
                    + this.getUploadFileName());
            int length = fis.read(buffer);
            // 循环写入
            while (length > 0) {
                // 每次写入length长度的内容
                fos.write(buffer, 0, length);
                length = fis.read(buffer);
            }
            fis.close();
            fos.flush();
            fos.close();
            return SUCCESS;
        }
       public void setUploadContentType(String uploadContentType) {
            this.uploadContentType = uploadContentType;
        }
      public void setUploadFileName(String uploadFileName) {
            this.uploadFileName = uploadFileName;
        }
    
        // 获取上传文件的保存路径
        // 通过读取存放目录货的保存路径
        public String getSavePath() {
            return ServletActionContext.getServletContext().getRealPath(savePath);
        }
    }

    3.然后配置Struts.xml

    添加上传的action元素

    <!-- 上传文件的action -->
            <action name="uploadAction" class="cn.cnsdhzzl.action.UploadAction">
                <!-- 通过param参数设置保存目录的路径 -->
                <param name="savePath">/upload</param>
                <result name="success">uploadSuccess.jsp</result>
            </action>

    实现下载功能

    1.首先你需要有一个下载链接

    <-- 指向下载的action逻辑视图名 -->
    <a href="downloadAction?fileName=123.jpg">点击下载</a>

    2.创建一个下载XXXaction

    public class DownloadAction extends ActionSupport {
        // 读取下载文件的目录
        private String inputPath;
        // 下载文件的文件名
        private String fileName;
        // 下载文件的输入流
        private InputStream inputStream;
        // 下载文件的类型
        private String conetntType;
    
        @Override
        public String execute() throws Exception {
            return SUCCESS;
        }
    public InputStream getInputStream() throws FileNotFoundException {
            String path = ServletActionContext.getServletContext().getRealPath(
                    inputPath);
            return new BufferedInputStream(new FileInputStream(path + "\"
                    + fileName));
        }
    //省略部分getset
    }

    3.然后配置Struts.xml

    添加下载的action元素

    <!-- 下载文件的action -->
            <action name="downloadAction" class="cn.cnsdhzzl.action.DownloadAction">
                <param name="inputPath">/upload</param>
                <result name="success" type="stream">
                    <!-- 设置文件类型 -->
                    <param name="contentType">application/image/jpeg</param>
                    <param name="inputName">inputStream</param>
                    <!-- 分为两部分,即设置下载处理方式和设置下载文件显示的文件名 -->
                    <param name="contentDisposition">attachment;filename="${fileName}"</param>
                    <param name="bufferSize">4096</param>
                </result>
                <result name="error">error.jsp</result>
            </action>
  • 相关阅读:
    iOS让软键盘消失的简单方法
    苹果使用蓝汛CDN网络分发ios8
    -pie can only be used when targeting iOS 4.2 or later
    java并发容器(Map、List、BlockingQueue)具体解释
    SQL SERVER 服务启动失败
    Android5.0新特性-Material Design
    java对象和json数据转换实现方式3-使用jackson实现
    XML Publiser For Excel Template
    Unity3D之Mecanim动画系统学习笔记(六):使用脚本控制动画
    Unity3D之Mecanim动画系统学习笔记(五):Animator Controller
  • 原文地址:https://www.cnblogs.com/cnsdhzzl/p/5841805.html
Copyright © 2020-2023  润新知