zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    ArrayList 和LinkedList
    Java集合复习
    Android 自定义View 例子一
    ant或perl混淆,打多渠道包,此jar包含证书链未验证的条目 无法签名的问题解决办法
    back键彻底关闭应用程序
    Android中View绘制流程
    XCode的快捷键
    Android系统的设计模式
    AsyncTask和Handler
    Android使用软引用和弱引用
  • 原文地址:https://www.cnblogs.com/JMLiu/p/8269879.html
Copyright © 2011-2022 走看看