JAVA中的文件上传技术-upload

JAVA中的文件上传技术-upload

01.背景介绍

在实际的工程项目中,经常回遇到文件上传的状况,例如在注册一个网站后,需要上传个人的照片信息,门户网站上传公示文件等。为了应对这个问题,apache组织也为此做了准备,提供了一些使用比较方便的jar包,文末会提供程序源码,当然也会有jar包。
本博文的javaweb环境是
这里写图片描述
使用的工具是eclipse,服务器是Tomcat

02.程序介绍

前端:

<body>
    <div align="center">
        <!-- 一定要注意这个 enctype="multipart/form-data" method="post"-->
        <form action="/upload/demo1" enctype="multipart/form-data" method="post">
        用户名:<input type="text" name="username" /><br>
        文件 :<input type="file" name="f" /><br>
        <input type="submit" /><br>
        </form>
    </div>
</body>

后端的servlet:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //是不可以使用request.getParameter("username");获取属性的
        //创建磁盘文件项工厂 
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //创建核心上传对象
        ServletFileUpload upload = new ServletFileUpload(factory);
        //解析请求
        try {
            List<FileItem> list =upload.parseRequest(request);
            //遍历list
            for (FileItem fi : list) {
                //判断是普通的上传组件,还是文件上传组件
                if(fi.isFormField()) {//普通上传组件
                    //获取name属性
                    String name = fi.getFieldName();
                    //获取值
                    String value = fi.getString("utf-8");//这里为了测试,写的是获取普通标签的值
                    System.out.println(name+"::"+value);
                }else {
                    //文件上传组件
                    //获取name属性
                    String name = fi.getFieldName();
                    //获取文件的名称,这样处理的原因是解决不同浏览器文件名不同,可能带有路径
                    String fileName=fi.getName().substring(fi.getName().lastIndexOf("\\")+1);
                    //获取文件的内容
                    InputStream is = fi.getInputStream();
                    //获取文件的存储路径
                    String path = this.getServletContext().getRealPath("/upload/");
                    //保存文件
                    FileOutputStream os = new FileOutputStream(new File(path,fileName));
                    //将输入流写到输出流
                    IOUtils.copy(is,os);
                    //关闭资源
                    os.close();
                    is.close();
                    //删除临时文件
                    fi.delete();
                    System.out.println(fileName+"上传完毕!");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

03.程序运行结果

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

04.程序源码

链接:https://pan.baidu.com/s/1nGMQvpAry-AoygDvNa7ngA 密码:n4op

猜你喜欢

转载自blog.csdn.net/meiqi0538/article/details/79887359