zoukankan      html  css  js  c++  java
  • struts2的单文件上传

    第一步:首先写个上传文件的页面(简单的一个form表单)

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>文件上传</title>
    </head>
    <body>
        <h1>文件上传</h1>
        <br><br>
        <form action="/Struts2-day02pm/upload/one_upload.action" method="post" enctype="multipart/form-data">
            文件上传1:<br><br>
            <input type="file" name="oneFile"><br><br>
            <input type="submit" value="开始上传">
        </form>
        
    </body>

    第二步:创建一个基类BaseAction.java,继承ActionSupport,并实现ServletRequestAware,ServletResponseAware,ServletContextAware三个接口,重写三个接口的set方法

    public class BaseAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{
        /**
         * 编写一个基类,继承ActionSupport并实现相应的接口
         * 以后的Action直接继承该类,就可以简单获取到Servlet API
         * 这是一个典型的适配设计模式
         * @author Owen
         */
    
        private static final long serialVersionUID = 7267018575222346353L;
        
        
        @Override
        public void setServletContext(ServletContext servletContext) {
        }
    
        @Override
        public void setServletResponse(HttpServletResponse response) {
        }
    
        @Override
        public void setServletRequest(HttpServletRequest request) {
        }
    
    }

    第三步:创建OneUploadAction请求处理类,继承BaseAction

    public class OneUploadAction extends BaseAction {
    
        private static final long serialVersionUID = -4445894434193884175L;
    //    该属性名必须和<input type="file" name="oneFile">中name值一致
        private File oneFile;
    //    真实名称
        private String oneFileFileName;
    //    文件类型
        private String oneFileContentType;
        
        private HttpServletRequest request;
        
        @Override
        public void setServletRequest(HttpServletRequest request) {
            this.request = request;
        }
    
        @Override
        public String execute() throws Exception {
    //        获取保存上传文件在服务器的真是路径
            String uploadPath = request.getServletContext().getRealPath("upload");
            System.out.println(uploadPath);//目录真是路径
            System.out.println("oneFile--"+oneFile.getName());//文件临时名称
            System.out.println("oneFileFileName--"+oneFileFileName);//文件原始名称
            System.out.println("oneFileContentType--"+oneFileContentType);//文件类型
    //        第一种:该步骤适合上传小文件
    //        将临时文件复制到硬盘上的真是路径
            /*
            File file = new File(uploadPath, oneFileFileName);//拼接文件的存放路径和存放文件的真实名称
            FileUtils.copyFile(oneFile, file);//将临时文件复制到上面这个路径
            */
            
    //        第二种:适合大文件上传操作
            /*InputStream is = null;
            OutputStream os = null;
            
            is = new FileInputStream(oneFile);
            os = new FileOutputStream(new File(uploadPath,oneFileFileName));
            
            byte[] buffer = new byte[500];
            int length = 0;
            while((length=is.read(buffer,0,buffer.length)) != -1){
                os.write(buffer, 0,length);
            }
            os.close();
            is.close();*/
            copyFile(uploadPath);
            
            return SUCCESS;
        }
        public void copyFile(String uploadPath){
            InputStream is = null;
            OutputStream os = null;
            
            try {
                is = new FileInputStream(oneFile);
                os = new FileOutputStream(new File(uploadPath,oneFileFileName));
                
                byte[] buffer = new byte[500];
                int len = 0;
                while((len=is.read(buffer,0,buffer.length)) != -1){
                    os.write(buffer, 0,len);
                }
                os.close();
                is.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
    
        public File getOneFile() {
            return oneFile;
        }
    
        public void setOneFile(File oneFile) {
            this.oneFile = oneFile;
        }
    
        public String getOneFileFileName() {
            return oneFileFileName;
        }
    
        public void setOneFileFileName(String oneFileFileName) {
            this.oneFileFileName = oneFileFileName;
        }
    
        public String getOneFileContentType() {
            return oneFileContentType;
        }
    
        public void setOneFileContentType(String oneFileContentType) {
            this.oneFileContentType = oneFileContentType;
        }
        
    }

    第三步:配置struts.xml文件

    <struts>
    
        <package name="upload-default" namespace="/upload" extends="struts-default">
            
            <action name="one_upload" class="com.struts2.day02pm.action.OneUploadAction">
                <result>/WEB-INF/jsp/one_upload_ok.jsp</result>
            </action>
            
        </package>
    
    </struts>
  • 相关阅读:
    三次请求(读-改-读)引出nibernate 一级缓存
    算法竞赛入门经典第一、二章摘记
    uva 10905 Children's Game
    uva 11205 The broken pedometer
    uva 10160 Servicing stations
    uva 208 Firetruck
    uva 167 The Sultan's Successors
    zoj 1016 Parencodings
    uva 307 Sticks
    uva 216 Getting in Line
  • 原文地址:https://www.cnblogs.com/myjavalife/p/4923093.html
Copyright © 2011-2022 走看看