文件上传—Servlet

文件上传

前端页面

必要条件

  1. 需要有一个form表单
  2. form表单需要设置以下几个属性:
    1. action: 提交数据的目的地
    2. method: 设置post
    3. enctype: 设置成multipart/form-data
  3. form里需要至少有一个file域: <input type=“file” name=“xxx” />

后端技术

所谓文件上传其实就是用流的方式,将文件从客户的电脑上通过网页中的表单, 以二进制流的方式,流到服务器的过程。

文件下载就是反过来, 将文件从服务器上通过二进制流的方式流到客户电脑上。

Servlet3.0上传方式

Servlet3.0上传的核心: 一个注解、一个接口

注解:

@MultipartConfig: 开启Servlet文件上传功能

接口:

javax.servlet.http.Part: 封装了上传的文件相关的所有信息

具体操作步骤
  1. 新建处理文件上传的Servlet,然后重写doPost方法
  2. 给Servlet添加@MultipartConfig注解,开启文件上传功能
  3. Part part = request.getPart(“input type=‘type’ name的值”);
  4. part对象有两个作用:
    1. 可以获取到上传文件的所有信息,比如:文件名、大小、类型、文件流数据
    2. 可以直接将文件写到服务器 part.write(“文件保存的路径”);

Apache Commons Fileupload 上传方式

用fileupload上传的核心就是:一个接口、两个类

接口: FileItem

封装了我们表单中的每个域的数据(可能是普通文本数据,也可能是上传的文件)

类:

DiskFileItemFactory: 用于创建文件上传对象的工厂

ServletFileupload: 文件上传对象

具体操作步骤
  1. 需要添加依赖: commons-fileupload.jar、commons-io.jar

  2. 新建处理文件上传的Servlet,然后重写doPost方法

  3. 调用ServletFileupload对象的静态方法,判断请求是否是一个文件上传请求

    if(!ServletFileupload.isMultipartContent(request)) {
        // 如果不是multipart请求,代表不是一个有效的文件上传请求, 下面的步骤都可以省略了
    }
    
  4. 创建文件上传工厂对象:

    DiskFileItemFactory factory = new DiskFileItemFactory();
    // factory.set.... 可以设置相关参数
    
  5. 创建文件上传对象

    ServletFileupload upload = new ServletFileupload(factory);
    // upload.set.... 可以设置相关参数
    
  6. 用文件上传对象解析请求对象,然后获取解析后的所有FileItem

    List<FileItem> fileItems = upload.parseRequest(request);
    
  7. 迭代处理每个FileItem

    1. 文本信息的FileItem获取后进行相关的业务操作
    2. 文件类型的FileItem获取后,调用FileItem.write将文件写到服务器某个目录下。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值