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

    1.在大多数应用中,都有文件上传功能。有两种文件上传的方式,一种是自己去解析http协议,获取文件上传的内容。另一种是通过第三方插件来实现文件上传。第三方插件一般有两种,smartfileupload(上传小文件效率比较好,没有更新),commons-fileupload

    2.在servlet中实现文件上传的步骤

      a) 导入jar包 commons-fileupload, common-io

      b) 编写jsp 页面,表单提交必须是 post ,enctype="multipart/form-data"

    <body>
        <form action="fileupload" method="post" enctype="multipart/form-data">
        用户名:<input type="text" name="name"/><br>
        文件:<input type="file" name="file"/><input type="submit" value="上传"/>
        </form>
    </body

      c) 编写servlet 

    @WebServlet("/fileupload")
    public class FileUploadServlet extends HttpServlet {
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //上传文件存放位置
            String path = req.getServletContext().getRealPath("/upload");
            //创建磁盘目录工厂  该工厂可以设置 临时文件大小,还可以设置临时目录
            DiskFileItemFactory df = new DiskFileItemFactory();
            //将目录绑定ServletFileUpload 类  这个类完成http协议的解析
            ServletFileUpload upload=new ServletFileUpload(df);
            try {
                //解析req  返回所有表单项目目录
                List<FileItem> list = upload.parseRequest(req);
                for(FileItem item:list){
                    if(item.isFormField()){//正常表单项
                        String name=item.getFieldName();
                        String value=item.getString();
                        System.out.println(name+"======"+value);
                    }else{//文件上传项
                        String name=item.getName();
                        InputStream is = item.getInputStream();
                        OutputStream os = new FileOutputStream(new File(path,name));
                        byte[] buffer = new byte[400];
                        int len=0;
                        while((len=is.read(buffer))!=-1)
                            os.write(buffer, 0, len);
                        os.close();
                        is.close();
                    }
                }
                
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
        }
    }

    3. Struts2中已经将文件上传功能封装好了,不需要再像servlet一样,分别来自己编码实现。

    实现步骤

      a) 编写 jsp 页面和 servlet 编写方式一样

    <form action="upload.action" method="post" enctype="multipart/form-data">
        文件:<input type="file" name="file"/><input type="submit" value="上传"/>
        </form>

      b) 编写处理上传文件的 Action

    public class UploadAction {
        //File的名称和表单域中的名称相同
        private File file;
        //获取文件名  文件名属性 必须是  表单域名+FileName;
        private String fileFileName;
        //获取文件的类型
        private String fileContentType;
        //上传的处理方法
        public String upload(){
            String path=ServletActionContext.getServletContext().getRealPath("/upload");
            try {
                FileUtils.copyFile(file, new File(path,fileFileName));
            } catch (IOException e) {
                e.printStackTrace();
            }
            return Action.SUCCESS;
        }
        
        public File getFile() {
            return file;
        }
        public void setFile(File file) {
            this.file = file;
        }
        public String getFileFileName() {
            return fileFileName;
        }
        public void setFileFileName(String fileFileName) {
            this.fileFileName = fileFileName;
        }
        public String getFileContentType() {
            return fileContentType;
        }
        public void setFileContentType(String fileContentType) {
            this.fileContentType = fileContentType;
        }
    }

    4.批量的文件上传实现

    Action 的实现

    public class BatchUploadAction {
        //File的名称和表单域中的名称相同
        private File[] file;
        //获取文件名  文件名属性 必须是  表单域名+FileName;
        private String[] fileFileName;
        //获取文件的类型
        private String[] fileContentType;
        //上传的处理方法
        public String upload(){
            String path=ServletActionContext.getServletContext().getRealPath("/upload");
            try {
                for(int i=0;i<file.length;i++)
                    FileUtils.copyFile(file[i], new File(path,fileFileName[i]));
            } catch (IOException e) {
                e.printStackTrace();
            }
            return Action.SUCCESS;
        }
        public File[] getFile() {
            return file;
        }
        public void setFile(File[] file) {
            this.file = file;
        }
        public String[] getFileFileName() {
            return fileFileName;
        }
        public void setFileFileName(String[] fileFileName) {
            this.fileFileName = fileFileName;
        }
        public String[] getFileContentType() {
            return fileContentType;
        }
        public void setFileContentType(String[] fileContentType) {
            this.fileContentType = fileContentType;
        }
    }

    Jsp

    <script type="text/javascript" src="jquery-1.11.3.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $('#btn').click(function(){
                var html=$("#content").html();
                html+="文件:<input type='file' name='file'/><br>";
                $("#content").html(html);
            });
            
        });
    </script>
    </head>
    <body>
        <form action="batch.action" method="post" enctype="multipart/form-data">
        文件:<input type="file" name="file"/><input type="button" value="增加" id="btn"/><br>
        <div id="content"></div>
        <input type="submit" value="上传"/>
        </form>
    </body>

    Struts.xml

    <struts>
        <!-- 设置上传文件大小的常量 
            maximumSize是单个文件大小
            maxSize 上传总文件大小
            maximunSize=20M  maxSize=200M,说明一次可以上传10个20M大小的文件
        -->
        <constant name="struts.multipart.maxSize" value="209715200"></constant>
        <package name="default" extends="struts-default" namespace="/">
            <action name="upload" class="cn.sxt.action.UploadAction" method="upload">
                <result>/success.jsp</result>
            </action>
            <action name="batch" class="cn.sxt.action.BatchUploadAction" method="upload">
                <result>/success.jsp</result>
                <interceptor-ref name="fileUpload">
                    <!-- 设置上传的单个文件大小 -->
                    <param name="maximumSize">20971520</param>
                </interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </action>
        </package>
    </struts>
  • 相关阅读:
    Tracert 转
    weblogic集群中获取jndi的方式
    《高性能网站构建实战》 目录--转
    linux下如何修改weblogic console登陆的用户名和密码
    启动weblogic的错误:Could not obtain an exclusive lock to the embedded LDAP data files directory
    linux常用命令
    转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
    转载--How to Install VMware Tools on CentOS 6.3
    转载-centos网络配置(手动设置,自动获取)的2种方法
    poj1083 思考题
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/11161096.html
Copyright © 2011-2022 走看看