Servlet3.0的文件上传功能

在Servlet3.0之前,文件上传需要借助于第三方插件,在Servlet3.0之后,Servlet本身开始支持文件上传功能。

获取上传的文件可以通过HTTPServletRequest的getPart和getParts两个方法实现,前者接受一个表单名为参数,返回对应的Part对象;后者返回一个包含所有Part的Collection。

通过获取的Part对象,可以实现对所上传文件的操作,包括读取上传文件的内容、删除文件以及把文件保存到磁盘上。Part还支持上传文件的各种属性的获取,包括文件大小、文件名、文件类型(通过)、请求头内容。

因为Post会把表单的各项包括type为text的input中的内容都放在请求实体中,而我们所需要获取的文件通常只是type为file的input中的内容,对于其他的input我们希望把它当成请求参数来对待,但此时不能通过getParameter来获取,必须先获取Part对象,再由Part的getInputStream获取输入流,通过输入流得到相应的value值。在读取字符串的时候,注意设置流的编码格式。

通过Part对象的getContentType方法,可以获取文件的类型,对于type为非file的input,getContentType获取的值是Null。

Part获取到的文件名、文件类型等属性值的获取,是通过分析Post实体提供的信息来完成的,比如下面是一个Post报文的实体:

-----------------------------23897129706324
Content-Disposition: form-data; name="filename"

20182文档
-----------------------------23897129706324
Content-Disposition: form-data; name="file"; filename="20182文档.docx"
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document

其中就表面了两个表单input,对应到Part就是两个Part对象,一个是filename,一个是file。他们的类型是通过Content-Type来指出的。filename没有提供Content-Type,所以getContentType的时候就会返回null。

转载于:https://www.cnblogs.com/JMLiu/p/8269879.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值