Javaweb----文件上传和下载

文件的上传和下载

	1.要有一个form标签,method=post请求

	2.form标签的encType属性值必须为multipart/form-data值

	3.在form标签中使用input type=file添加上传的文件

	4.编写服务器代码接受,处理上传的数据

文件上传的http协议介绍

1.为什么文件上传一定是post请求,因为get请求方式数据上传有长度限制

2.encType=multipart表示提交的数据按多段的形式拼接,然后以二进制的形式发送给客户端,以流的形式。

3.webKitFormBoundaryc|2joVsAfxzitHaW是由浏览器自动生成的分割线,位于最后的分割线会比别的分割线多--,代表数据的末尾

上传使用的类和方法

1.导入Commons-fileupload.jar包

2.  (1)ServletFileUpload类,用于解析上传的数据

	(2)FileItem类表示每个表单项

	(3)boolean FileItem .isFormfield()判断是普通的表单项还是文件	

	(4)FileItem.getFieldName()表示获取表单项的name属性值

    (5)FileItem.getString()获取当前表单项的值

	(6)FileItem.getName获取上传的文件名

	(7)将上传的文件写到参数file所指向的硬盘位置

具体流程:

1.创建静态页面,部署好Servlet,通过form提交后跳转

2.创建FileItemFactory实例对象,DikDiskFileItemFactory  
 FileItemFactory fileItemFactory = new DiskFileItemFactory();
      
3.创建ServletFileUpload实例,关联上面创建的FileItemFactory,将其作为参数
  ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
4.使用list接受ServletFileUpload.parseRequest(req)

5.遍历list集合,挨个判断文件是否是表单项,若是表单项则获取name值和value值,若不是则输出name值,文件名和写入的路径
 List<FileItem> list = fileUpload.parseRequest(req);
    for (FileItem item : list) {
          if (item.isFormField()) {
            System.out.println(item.getFieldName());
             System.out.println(item.getString("UTF-8"));
           }else {
               System.out.println(item.getFieldName());
                System.out.println(item.getName());

           item.write(new File("d:\\"+item.getName()));

文件下载的实现

1.获取下载的文件名

      String downloadFilename = "1.jpg";
        
        //


2.读取要下载的文件

//2.读取要下载的文件

        ServletContext servletContext = getServletContext();
        String mimeType = servletContext.getMimeType("/file/" + downloadFilename);
        System.out.println("下载的文件类型"+mimeType);
        //

3.把下载的文件回传给客户端

//3.把下载的文件回传给客户端
        InputStream resourceAsStream = servletContext.getResourceAsStream("/file/1.jpg");
        OutputStream outputStream = resp.getOutputStream();
        IOUtils.copy(resourceAsStream,outputStream);

        //

4.在回传之前,通过响应头告诉客户端返回的数据类型


//4.在回传之前,通过响应头告诉客户端返回的数据类型
        resp.setContentType(mimeType);
        //attachment 表示附件 filename表示下载的文件名
        resp.setHeader("Content-Dispositon","attachment; filename="+downloadFilename+ URLEncoder.encode("1.jpg","UTF-8"));

5.还要告诉客户端收到的数据是用于下载使用还是使用响应头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值