手记

javaweb上传文件(mark)

使用commons-fileupload
1.导入jar包

commons-fileupload-1.2.1.jar 文件上传
commons-io-1.4.jar 它是提供的io工具.
介绍commons-fileupload
它有三个核心
1.DiskFileItemFactory类
2.ServletFileUpload类
3.FileItem

2.快速入门:
        1.创建upload2.jsp页面
            <form action="${pageContext.request.contextPath}/upload2" method="post" encType="multipart/form-data">
                <input type="file" name="f"><br>
                <input type="submit" value="上传">
            </form>
        2.创建Upload2Servlet
            1.创建一个DiskFileItemFactory
                DiskFileItemFactory factory=new DiskFileItemFactory();
            2.创建ServletFileUpload类                  
                ServletFileUpload upload=new ServletFileUpload(factory);                    
            3.解析所有上传数据
                List<FileItem> items = upload.parseRequest(request);

        3.了遍历items集合,集合中的每一项,就是一个上传数据.
            1.isFormField();

            2.getFieldName();
                返回值String,得到组件名称  <input name="">
            3.getName();
                返回值是String,得到的是上传文件的名称.
                注意:浏览器不同,它们得到的效果不一样。
                    1.包含全路径名称  例如: C:\Users\Administrator\Desktop\a.txt
                    2.只包含上传文件名称 例如:a.txt

            4.getString();
                这个方法可以获取非上传组件的内容,相当于  getParameter方法作用。

                如果是上传组件,上传的文件是文本文件,可以获取到文件文件的内容。
                但是如果不是文件文件,例如:是一张图片,这样获取合适吗?

            5.获取上传文件的内容,保存到服务器端.
                item.getInputStream();它是用于读取上传文件内容的输入流.
                使用文件复制操作就可以完成文件上传。

                IOUtils.copy(item.getInputStream(), fos);

关于文件上传的注意事项:

    1.上传文件在服务器端保存位置问题

        1.保存在可以被浏览器直接访问的位置
            例如:商城的商品图片

            保存在工程的WebRoot下的路径(不包含META-INF以及WEB-INF目录及其子目录)

        2.保存在不能被浏览器直接访问的位置
            例如:付费的视频。       

            1.工程中   META-INF  WEB-INF目录及其子目录
            2.不在工程中的服务器的磁盘目录下.

    ------------------------------------------------
    2.上传文件在同一个目录重名问题    
        在开发中解决这个问题,可以给上传文件起随机名称。

        1.使用毫秒值
                2.使用uuid

3人推荐
随时随地看视频
慕课网APP