Java文件上传与下载

目录

1 文件上传

1.1 文件上传入门

1.1.1 实现文件上传条件

1.1.2 手动解析上传文件

1.2 工具实现文件上传

1.2.1 commons-fileupload组件概述

1.2.2 核心的API

1.2.3 fileUpload开发步骤

1.3 实现单文件上传

1.4 实现多文件上传

1.5 动态选择多文件上传

1.6 文件上传的细节

1.6.1 限制文件类型

1.6.2 限制上传文件大小

1.6.3 查看文件上传的进度

1.6.4 处理文件名重复问题

1.6.5 把同一个目录的文件打散到不同的目录下

1.6.6 得到普通文本控件内容

2 文件下载

2.1 普通文件下载

2.2 使用servlet程序下载(推荐)


1 文件上传

1.1 文件上传入门

1.1.1 实现文件上传条件

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>

1.1.2 手动解析上传文件

/**

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

 * @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);

   }

}

1.2 工具实现文件上传

1.2.1 commons-fileupload组件概述

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

1.2.2 核心的API

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

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

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

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

1.2.3 fileUpload开发步骤

1)导入commoms-fileuload的jar包

                 commons-fileupload-1.2.2.jar  核心包

                 commons-io-2.1.jar   辅助包

2)编写程序

1.3 实现单文件上传

//1.创建DiskFileItemFactory

      /**

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

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

       */

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

     

      //2.创建ServletFileUpload

      ServletFileUpload upload = new ServletFileUpload(factory);

     

      /**

       * 设置文件名的编码

       */

      upload.setHeaderEncoding("utf-8");

     

      //3.解析request数据(把每一个文件封装到FileItem对象中,FileItem放入List中)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

棉花糖老丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值