• struts2上传下载


    struts上传下载必须引入两个jar文件:

    commons-fileupload-x.x.x.jar和comons-io-x.x.x.jar上传文件

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import org.apache.struts2.ServletActionContext;
    
    import pojo.User;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class FileUpAction extends ActionSupport{
        private static final int BUFFER_SIZE = 40*40;
        private File upload;
        private String uploadContentType;
        private String uploadFileName;
        private String savePath;
        private User user;
        private static void copy(File source, File target){
            InputStream is = null;
            OutputStream os = null;
            try{
                is = new BufferedInputStream(new FileInputStream(source), BUFFER_SIZE);
                os = new BufferedOutputStream(new FileOutputStream(target), BUFFER_SIZE);
                int len = 0;
                byte[] bs = new byte[BUFFER_SIZE];
                while ((len=is.read(bs))!=-1) {
                    os.write(bs, 0, len);
                }
            }catch (Exception e) {
                e.printStackTrace();
            }finally{
                if(is!=null){
                    try{
                        is.close();
                    }catch (Exception e2) {
                        // TODO: handle exception
                        e2.printStackTrace();
                    }
                }
                if(os!=null){
                    try{
                        os.close();
                    }catch (Exception e3) {
                        // TODO: handle exception
                        e3.printStackTrace();
                    }
                }
            }
        }
        
        @Override
        public String execute() throws Exception{
            String path = ServletActionContext.getServletContext().getRealPath(this.getSavePath())+"\"+this.getUploadFileName();
            user.setPhone(this.uploadFileName);
            File target = new File(path);
            copy(this.upload, target);
            return SUCCESS;
        }
    
        public File getUpload() {
            return upload;
        }
    
        public void setUpload(File upload) {
            this.upload = upload;
        }
    
        public String getUploadContentType() {
            return uploadContentType;
        }
    
        public void setUploadContentType(String uploadContentType) {
            this.uploadContentType = uploadContentType;
        }
    
        public String getUploadFileName() {
            return uploadFileName;
        }
    
        public void setUploadFileName(String uploadFileName) {
            this.uploadFileName = uploadFileName;
        }
    
        public String getSavePath() {
            return savePath;
        }
    
        public void setSavePath(String savePath) {
            this.savePath = savePath;
        }
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    }

    struts2中的action配置

    <action name="fileUp" class="actions.FileUpAction">
                <param name="savePath">/upload</param>
                <result>/userInfo.jsp</result>
    </action>

    表单

    <s:form action="fileUp" namespace="/" method="post" enctype="multipart/form-data">
            <s:textfield name="user.name" label="姓名" size="20"/>
            <s:file name="upload" label="形象" size="20"/>
            <s:textfield name="user.age" label="年龄" size="20"/>
            <s:radio list="#{1:'男',2:'女' }" name="user.sex" listKey="key" listValue="value" value="1" label="性别" cssStyle="border:0px;"/>
            <s:textfield name="user.icard" label="身份证号" size="20"/>
            <s:textfield name="user.phone" label="联系电话" size="20"/>
            <s:textfield name="user.address" label="家庭住址" size="20"/>
            <s:submit value="确定录入" align="center"/>
    </s:form>

    如果表单中包含一个name属性为xxx的文件域,那么在Action中可以使用如下3个属性来封装文件域信息:

    File xxx 封装文件域对应的文件内容

    String xxxContextType 封装文件域对应文件的文件类型

    String xxxFileName 封装文件域对应文件的文件名

    使用图片的时候

    <img src="upload/<s:property value="uploadFileName"/>"/>



    下载

    import com.opensymphony.xwork2.ActionSupport;
    
    public class DownloadAction extends ActionSupport{
        private String downPath;
        public InputStream getInputStream() throws Exception{
            return ServletActionContext.getServletContext().getResourceAsStream(downPath);
        }
        public String getDownPath() {
            return downPath;
        }
        public void setDownPath(String downPath) {
            this.downPath = downPath;
        }
        public String getDownloadFileName(){
            String downFileName = downPath.substring(7);
            try{
                downFileName = new String(downFileName.getBytes(), "ISO8859-1");
            }catch (Exception e) {
                e.printStackTrace();
                // TODO: handle exception
            }
            return downFileName;
        }
        
        @Override
        public String execute() throws Exception{
            return SUCCESS;
        }

    struts2.xml配置

    <action name="downLoad" class="actions.DownloadAction">
                <result type="stream">
                    <param name="contentType">
                        application/msword,text/plain,application/vnd.ms-powerpoint,application/vnd.ms-excel
                    </param>
                    <param name="inputName">inputStream</param>
                    <param name="contentDisposition">        
                        attachment;filename="${downloadFileName}"
                    </param>
                    <param name="bufferSize">40960</param>
                </result>
            </action>

    使用

     <a href="downLoad.action?downPath=upload/123.png">下载</a>

  • 相关阅读:
    Golang 实现简单的 Web 服务器
    Aliyun linux repo文件
    云服务器查看登录ip和本机出口ip
    10个高效Linux技巧及Vim命令对比
    使用mkfs.ext4格式化大容量磁盘
    LINUX SHELL 多个命令一起执行的几种方法
    GPT分区
    3种方法更改Linux系统的主机名(hostname)
    Nginx代理访问RDS
    Centos7安装Docker
  • 原文地址:https://www.cnblogs.com/tuifeideyouran/p/4351940.html
Copyright © 2020-2023  润新知