文件上传总结笔记

本文总结了文件上传的相关知识,包括手动解析文件上传、使用Apache Commons FileUpload组件实现单文件和多文件上传,限制文件类型和大小,处理文件名重复问题,以及如何实现文件下载。通过示例代码详细阐述了每个步骤的操作方法。
摘要由CSDN通过智能技术生成

实现文件上传条件

1)表单的提交方式必须是POST方式。(才有content-type属性)

2)有文件上传表单,表单中有<input type="file"/>的选择文件的标签

 3)把表单设置为enctype="multipart/form-data",提交的数据不再是key-value对,而是字节数据

<form action="${pageContext.request.contextPath }/UploadDemo1" method="post" enctype="multipart/form-data">

        请选择文件: <input type="file" name="img"/><br/>

        <input type="submit" value="上传" />

    </form>

手动解析上传文件

/**

 * 手动处理上传文件的逻辑

 * @author APPle

 */

public class UploadDemo1 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

       //得到实体内容数据

       InputStream in = request.getInputStream();

       BufferedReader br = new BufferedReader(new InputStreamReader(in));

         //读取文件的开始符

       String startTag = br.readLine();

        //读取文件名: Content-Disposition: form-data; name="img"; filename="news.txt"

       String line = br.readLine();

       String fileName = line.substring(line.lastIndexOf("filename=\"")+10, line.lastIndexOf("\"") );

       System.out.println("文件名:"+fileName);

         //跳过2

       br.readLine();

       br.readLine();

        //读取文件的实际内容

       String str = null;

       BufferedWriter bw = new BufferedWriter(new FileWriter("E:/files/"+fileName));

       while((str=br.readLine())!=null){

           //读到文件结束符时退出循环

           if((startTag+"--").equals(str)){

              break;

           }

               //把内容写出文件中

           bw.write(str);

           bw.newLine();

           bw.flush();

       }

       //关闭

       bw.close();

       br.close();

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

       doGet(request, response);

    }

}

工具实现文件上传

2.1 commons-fileupload组件

                   是Apache组织旗下的开源的文件上传的组件。使用非常简单易用。

               2.2 核心的API

                   DiskFileItemFactory类: 用于创建上传对象,设置文件缓存区大小,设置文件缓存目录。

                   ServletFileUpload类: 用于在Servlet程序中实现文件上传

                                     List<FileItem> list = parseRequest(request):  用于解析请求数据,提取和封装文件信息。

 

                                     FileItem类: 封装一个文件的所有相关的信息javabean。包含文件名称,文件大小,文件类型,                                                         文件数据内容。

             2.3 开发步骤

                            1)导入commoms-fileuload的jar包

                                               commons-fileupload-1.2.2.jar  核心包

                                               commons-io-2.1.jar   辅助包

                              2)编写程序

 实现单文件上传

//1.创建DiskFileItemFactory

       /**

        * 参数一: 表示文件缓存区的大小。如果上传的文件没有超过缓存区大小,则文件不缓存;否则缓存文件,缓存到临时目录。(byte

        * 参数二: 表示缓存区的临时目录。

        */

       DiskFileItemFactory factory = new DiskFileItemFactory(10*1024,new File("e:/temp/"));

              //2.创建ServletFileUpload

       ServletFileUpload upload = new ServletFileUpload(factory);

              /**

        * 设置文件名的编码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值