zoukankan      html  css  js  c++  java
  • java web文件上传详细解析

    目录

    1. 工具
    2. 上传案例
    3. 上传详细解析流程

    1.工具

    MyEclipse10.7、火狐浏览器、fileupload组件(添加的jar包 commons-fileupload-1.2.2.jar、commons-io-2.2.jar )

    2.上传案例《先上案例,如果熟悉的同学可以绕过,直接看后面》

    1. JSP页面

          2.UploadServlet.java

        

    @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            String fieldName = null;
            String fieldValue = null;
            //判断form表单传过来的数据MIME是否是<enctype="multipart/form-data">
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if(!isMultipart){
                throw new RuntimeException("这个表单提交的数据不是《multipart/form-data》类型!");
            }
            //解析请求的内容   --  fileupload组件
            DiskFileItemFactory factory = new DiskFileItemFactory();//产生FileItem的工厂
            ServletFileUpload sfu = new ServletFileUpload(factory);
            List<FileItem> items = new ArrayList<FileItem>();
            try {
                /*
                 * [name=null, StoreLocation=C:	omcat7	emp1 upload_5629e1cf_156bc94a7ca__7ffe_00000000.tmp1, 
                 * size=5bytes, isFormField=true, FieldName=name, name=test1.zip1, 
                 * StoreLocation=C:	omcat7	emp1 upload_5629e1cf_156bc94a7ca__7ffe_00000001.tmp1, size=154bytes, 
                 * isFormField=false, FieldName=file1]  ----->items的值
                 */            
                items = sfu.parseRequest(request);
                for(FileItem item:items){
                    if(item.isFormField()){    //普通的字段
                        fieldName = item.getFieldName();
                        fieldValue = item.getString();
                    }else{//上传文件的处理
                        InputStream in = item.getInputStream();
                        //上传文件的文件名   --test1.zip1
                        String fileName = item.getName();    
                        if(fileName != null){
                            fileName = FilenameUtils.getName(fileName);
                        }
                        //存放路径        --   C:	omcat7webapps1FileUploadfiles
                        String realPath = getServletContext().getRealPath("/files");
                        File storeDirectory = new File(realPath);
                        if(storeDirectory.exists()){    //判断文件是否存在
                            storeDirectory.mkdirs();    //若文件不存在则创建一个
                        }
                        //将文件写入到上述文件夹中C:	omcat7webapps1FileUploadfiles
                        item.write(new File(storeDirectory,fileName));
                    }
                }
            } catch (Exception e) {
                throw new RuntimeException("解析请求失败!");
            }
            PrintWriter out = response.getWriter();
            out.write( fieldName + "=" +fieldValue);
        }

    3.上传详细解析流程跟踪

  • 相关阅读:
    Android自动化测试解决方案
    Oracle数据库的DML命令的处理过程详解
    Oracle数据库的BULK COLLECT用法之批量增删改
    建设DevOps能力,实现业务敏捷
    强大的C# Expression在一个函数求导问题中的简单运用
    Visual Studio 11开发者预览版发布(附下载)
    js table隔行变色
    编译原理语法推导树
    巧用数据库归档技术解决性能下降问题
    编译原理正规式和有限自动机
  • 原文地址:https://www.cnblogs.com/Shock-W/p/5803873.html
Copyright © 2011-2022 走看看