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

    1. 文件上传有2种方式:

        一种方式以流的形式提交,到服务器后自己解析http协议获取上传内容。

        二种方式使用第三方提供的插件来完成文件上传:smartfileupload,commons-fileupload.

    2.使用 commons- fileupload实现文件上传的步骤:
      a) 导入commons-fileupload,和 commons-io两个包。

      b) 编写jsp页面,页面表单必须是post提交方式,必须enctype设置为:multiparty/form-data.

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

      c) 编写Servlet:

    @WebServlet("/upload")
    public class UploadServlet extends HttpServlet{
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            //创建磁盘工厂对象
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //设置缓存区大小
            factory.setSizeThreshold(1024*1024);
            //设置文件上传的临时目录
            factory.setRepository(new File("c:/"));
            //创建文件上传处理器
            ServletFileUpload handler = new ServletFileUpload(factory);
            try {
                //将文件上传表单 解析为FileItem,一个FileItem是一个表单项
                List<FileItem> list = handler.parseRequest(req);
                for(FileItem item:list){
                    if(item.isFormField()){//普通表单项
                        //item.getFieldName()获取表单项的名称
                        //iem.getString() 获取表单项的值
                        System.out.println(item.getFieldName()+"-----"+item.getString());
                    }else{//文件上传项
                        //item.getName()获取文件名---不同浏览器可能不一样
                        //item.getString() 获取文件内容
                        String path=req.getRealPath("/upload");
                        //将文件内容写入指定位置
                        item.write(new File(path,item.getName()));
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    4. 在struts2中,已经将文件上传功能继成到了fileload拦截器中,该拦截器默认被引用,所以可以直接开发文件上传功能。默认情况下上传的文件最大为2m,如果大于默认需要重新设置。

    实现步骤如下:

    a) 编写jsp:

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

    b)编写action:

    public class UploadAction {
        //file文件 的名称和表单域名相同
        private File file;
        //文件名 是由  表单域名+FileName组成
        private String fileFileName;
        //文件类型 是由  表单域名+ContentType组成
        private String fileContentType;
        //上传处理
        public String upload() throws IOException{
            HttpServletRequest req = ServletActionContext.getRequest();
            String path = req.getRealPath("/upload");
            //自己可以通过io流来实现
            FileUtils.copyFile(file, new File(path,fileFileName));
            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;
        }
    }

    c)配置:

    <struts>
        <!-- 设置总文件大小 
        struts.multipart.maxSize>=maximumSize
            -->
        <constant name="struts.multipart.maxSize" value="209715200"></constant>
        <package name="default" namespace="/" extends="struts-default">
            <action name="upload" class="cn.sxt.action.UploadAction" method="upload">
                <interceptor-ref name="fileUpload">
                    <!-- 设置上传文件的大小  单个文件大小 -->
                    <param name="maximumSize">209715200</param>
                </interceptor-ref>
                <interceptor-ref name="basicStack"></interceptor-ref>
                <result>/index.jsp</result>
            </action>
        </package>
    </struts>

    5. 批量的文件上传:

    public class BatchUploadAction {

       //file文件 的名称和表单域名相同

       private File file[];

       //文件名 是由  表单域名+FileName组成

       private String fileFileName[];

       //文件类型 是由  表单域名+ContentType组成

       private String fileContentType[];

       //上传处理

       public String upload() throws IOException{

          HttpServletRequest req = ServletActionContext.getRequest();

          String path = req.getRealPath("/upload");

          for(int i=0;i<file.length;i++)

             FileUtils.copyFile(file[i], new File(path,fileFileName[i]));

          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;

       }

    }

      

      

  • 相关阅读:
    软件测试学习总结
    MySQL数据库中主键和索引的区别和联系
    什么是接口测试及其测试流程
    bug生命周期
    啊这...2-get/post请求区别,来给你看看post请求url中传参
    啊这...1-get/post请求区别,你还在认为get只能在url传参吗?传json格式会咋样?
    关于博客园全站内容审核中...如出现此问题:请移步xxx
    git-2-企业级gitlab的使用及管理工具Sourcetree
    fiddler-12-Proxifier+fiddler进行PC端抓包
    微信小程序弹出订阅消息确认弹窗的限制
  • 原文地址:https://www.cnblogs.com/forever2h/p/6733944.html
Copyright © 2011-2022 走看看