使用servlet实现文件上传(用common-fileUpload和common-io包)

http://blog.csdn.net/fatehj/article/details/51050437

用servlet实现文件的上传,这里用到Apache的开源工具:common-fileupload。因为common-fileupload依赖于common-io,所以需要同时下载两个包。 
这里写图片描述 
common-fileupload下载链接 
这里写图片描述 
commonm-io下载链接

  1. 把两个包相应的jar文件拷贝到项目的lib文件夹下: 
    这里写图片描述

  2. 创建文件上传表单:(fileUpload.jsp)

<body>
        <form action="FileUploadServlet" method="post" enctype="multipart/form-data">
            <input type="text" name="username"><br>
            <input type="file" name="file"><br>
            <input type="submit" value="文件上传">
        </form>
  </body>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意事项: 
这里文件上传表单中的method和enctype的设置属性是固定的,只能为post和multipart/form-data

<form action="XXXServlet" method="post" enctype="multipart/form-data">
   
   
  • 1
  • 1

3.servlet代码编写 
先建立一个upload文件夹 
这里写图片描述

代码:

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        DiskFileItemFactory dfi = new DiskFileItemFactory();
        //获得上传文件的存储路径
        String path  = request.getRealPath("/upload");
        //设置文件大小超过1024*1024就写到disk上
        dfi.setSizeThreshold(1024*1024);
        //设置存储的仓库
        dfi.setRepository(new File(path));
        //实例化一个servletFileUpload对象
        ServletFileUpload sfu = new ServletFileUpload(dfi);
        //解决上传文件乱码问题
        sfu.setHeaderEncoding("utf-8");
        try {
            List<FileItem> list = sfu.parseRequest(request);
            //取得session
            HttpSession  session  = request.getSession();
            //遍历得到每个FileItem
            for(FileItem item : list){
                //取得表单文本框的名字
                String name = item.getFieldName();
                //如果上传的这个文件只是一个表单字段,而不是一个文件
                if(item.isFormField()){
                    //取得文本框输入的内容
                    String value = item.getString();

                    //存储数据
                    session.setAttribute(name, value);
                }else{
                    //如果上传的是一个文件
                    //取得上传文件的名字,即上传框中的内容名字
                    String value = item.getName();
                    //因为在opera浏览器中文件上传item.geName()会得到具体路径而不止是名字,所以需要从路径中取出名字
                    //取得文件路径名字开始的位置
                    int start = value.lastIndexOf("\\");
                    //得到文件名
                    String fileName = value.substring(start+1);
                    //读取文件的内容
                    item.write(new File(path,fileName));
                    //存储数据
                    session.setAttribute(name, fileName);

                }   
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //请求转发到另一个页面,在另一个页面取出上传文件的信息
        request.getRequestDispatcher("fileInfo.jsp").forward(request, response);

    }

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

注意问题: 
在这里的servlet中不能用request.getParameter("字段名")来获取表单的字段内容,因为表单的enctype="multipart/form-data",这里传输的是二进制,所以不能用`getParameter(“字段名”)获得。 
获得字段名:

String name = item.getFieldName();
   
   
  • 1
  • 1

获得内容:(分两种情况)

  1. 文本框内容:
String value = item.getString();
//或者
String value = item.getString("指定编码encoding")
   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

2.文件上传:

    //取得上传文件的名字,即上传框中的内容名字
        String value = item.getName();      
    //因为在opera浏览器中文件上传item.geName()会得到具体路径而不止是名字,所以需要从路径中取出名字
    //取得文件路径名字开始的位置
        int start = value.lastIndexOf("\\");
    //得到文件名
        String fileName = value.substring(start+1);
    //读取文件的内容
        item.write(new File(path,fileName));
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值