码迷,mamicode.com
首页 > 编程语言 > 详细

每天学习一个小功能:java文件上传

时间:2017-09-12 00:38:03      阅读:293      评论:0      收藏:0      [点我收藏+]

标签:parser   请求   servlet   ret   mfa   需求   img   post请求   factory   

====(1、)第一种、利用普通缓冲流进行文件上传

① 前端

注意:

1、指定表单类型为文件上传表单 :enctype="multipart/form-data" 
2、提交方式必须为:post
3、表单中,存在文件域 的表单元素

<form name="frm_test" action="${pageContext.request.contextPath }/shangchuan" method="post" enctype="multipart/form-data">
            <%--<input type="hidden" name="method" value="upload">--%>
           
            用户名:<input type="text" name="userName">  <br/>
           文件:   <input type="file" name="file_img">   <br/>
           
           <input type="submit" value="提交">
 </form>

②后台

注意:

 request.getQueryString();//获取get提交的数据
 request.getInputStream();//获取post提交的数据,post请求以流的形式发送,(inputstream)

@RequestMapping("shangchuan")
    public String shangChuan(HttpServletRequest request,HttpServletResponse respose) throws ServletException,IOException{
        //获取表单(POST)数据
        InputStream in=request.getInputStream();
        //转换流
        InputStreamReader inReader=new InputStreamReader(in);
        //缓冲流
        BufferedReader reader=new BufferedReader(inReader);
        //遍历
        String str=null;
        while((str=reader.readLine())!=null){
            System.out.println("-=------------------------------------------------"+str);
            //解析上传的数据
        }
        
        return null;
    }

 

====(2、)第二种、FileUpload组件(上传组件)! apache提供的开源项目!

备注:

*******************************************************
 1、下载组件;引入jar文件
          commons-fileupload-1.2.1
          commons-io-1.4
 2、配置(prop/xml)
 3、FileUpload 的api学习

 

  * ① FileFactory  文件上传工厂类(把每一个请求封装为一个个FileItem对象)
     *  fileItemFactory.setRepository(repository) 设置文件上传临时路径(有默认)
     *  
     * ② ServletFileUpload 文件上传核心类
     *   List = upload.parseRequest(request)
     *   upload.isMultipartContent(request) 判断表单类型:文件上传表单
     *       // 一、设置单个文件允许的最大的大小: 30M
            upload.setFileSizeMax(30*1024*1024);
            // 二、设置文件上传表单允许的总大小: 80M
            upload.setSizeMax(80*1024*1024);
            // 三、 设置上传表单文件名的编码
            // 相当于:request.setCharacterEncoding("UTF-8");
            upload.setHeaderEncoding("UTF-8") 相当于request.setContentType(..);
        ③ FileItem 封装了普通表单项的值以及文件上传表单元素值
        item.getFileName()         获取上传表单元素名称
        item.getString()           获取上传数据
        item.getString("UTF-8")    获取上传数据,处理中文乱码
        item.getContentype()       获取上传文件类型【文件项】
        item.getInputStream()      获取文件流【文件项】
        item.getName();            获取文件名【文件项】
        item.write(new File("文件路径"));  把文件写入指定目录
        item.delete                     删除临时文件
     */
  *******************************************************

     * ##################################
    !!!!! 本功能的需求:!!!!!
     * 实现一个完整的文件上传
     * 1、设置单个文件不能超过30M
     * 2、设置总大小不能超过50M
     * 3、上传目录,上传到项目资源目录下的upload目录下
     * 4、上传文件不能覆盖,解决上传文件文件名不重名问题
     * ##################################
    @RequestMapping("shangchuan")
    public String FileUpload(HttpServletRequest request,HttpServletResponse respose) throws ServletException,IOException{
        //1、创建文件上传工场类
        FileItemFactory fileItemFactory=new DiskFileItemFactory();
        
        //2、创建文件上传核心类对象
        ServletFileUpload upload=new ServletFileUpload(fileItemFactory);
        //upload.setFileItemFactory(fileItemFactory);
        //【一、设置单个文件最大:30M】
        upload.setFileSizeMax(30*1024*1024);//30M
        //【二、设置总文件大小:50M】
        upload.setSizeMax(50*1024*1024);
        //3、判断当前表单是否为文件上传表单
        if(upload.isMultipartContent(request)){
            //4、把请求数据转换为FileItem对象集合*(FileItem代表每一个上传主键)
            try {
                List<FileItem> list=upload.parseRequest(request);
                //5、遍历,得到每一个上传项
                for(FileItem item:list){
                    //6、遍历时要判断是普通表单还是文件上传的数据
                    if(item.isFormField()){
                      //普通表单
                        //获取元素名称
                        String fileName=item.getFieldName();
                        //获取值
                        String value=item.getString("UTF-8");
                        
                        System.out.println(fileName+value);
                    }else{
                        //文件上传表单(对应前端 type=file)
                        /******** 文件上传 ***********/
                        //处理文件上传
                        
                        //获取文件名
                        String name=item.getName();
                        //重新生成文件名
                        
                        //获取上传的目录路径
                        String basePath=request.getSession().getServletContext().getRealPath("/upload");
                        //创建文件对象
                        File file =new File(basePath,name);
                        //写入文件
                        item.write(file);
                        item.delete();//删除临时文件
                    }
                    
                    
                }
                
                
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }else{
            System.out.println("当前表单不是文件上传表单,不处理");
        }
        return null;
    }

每天学习一个小功能:java文件上传

标签:parser   请求   servlet   ret   mfa   需求   img   post请求   factory   

原文地址:http://www.cnblogs.com/weiyuanquyu/p/7508002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!