commons-fileupload.jar的详解

  1. 什么是文件上传?
     所谓的文件上传就是将客户端的资源通过网络数据传递到服务端,

  2. 为什么要用文件上传?
     讲道理,使用响应的方式也可以向服务器端上传文本数据,但是其过程比较费劲,而且如果上传的是图片等资源,则无法通过该方法上传。使用上传文件的更主要原因是因为一般上传的文件数据都很大。

  3. 文件上传的本质?
     文件上传的本质就是IO流的操作。服务器端通过流读取数据,然后对数据进行解析,得到上传文件的内容,然后保存在服务器端。

  4. 客户端如何上传数据?
     <1.>method=”post”;因为提交的数据会比较大,所以要使用post提交。
     <2.>必须使用要有name属性。
     <3.>在input标签中设置属性encType=”Multipart/form-data”。

  5. 服务器端如何处理数据?
     <1.>用request对象获取请求信息。
     <2.>通过request的getInputStream()方法,可以读取到所有请求正文消息。
     <3.>操作IO流,将所需要的信息保存在服务器端。

  6. fileupload.jar包是干嘛用的?
     commons-fileupload.jar通常和commons-io.jar包一起使用的。用来操作文件上传。里面封装了很多上传的功能,大大简化了我们写上传代码的复杂性。

  7. fileupload包中核心的三个类介绍:
    <1.>DiskFileItemFactory类
    作用:可以设置缓冲区大小以及临时保存位置。

     setSizeThreshold( int sizeThreshold )
    设置缓冲区大小,如果不设置,sizeThreshold大小为:10240(10KB)。
     setRepository( File repository );
    设置临时文件的保存位置,如果不设置,repository为系统的临时目录。
     DiskFileItemFactory();
    构造一个缓冲区大小为sizeThreshold和临时文件为目录为repository的文件项工厂。
     DiskFileItemFactory( int SizeThreshold , File repository );
    构造一个带指定参数的文件项工厂类。

    <2.>ServletFileUpload类
    作用:实现上传的一些实用程序集合。
     ServletFileUpload( DiskFileItemFactory factory );
    构造函数,使用factory指定的缓冲区大小和临时文件。
     public List<FileItem> parseRequest ( HttpSevletRequest request );
    解析request对象,得到所有的上传项,返回一个List<FIleItem>集合,其中每个FileItem就相当于一个上传项。
     boolean isMultipartContext ( HttpServletRequest request );
    用于判断是否为上传项,如果是就返回true。因为上传项中,encType=”Multipart/form-data”,所以如果提交有这条属性,则返回true。
     setFileSizeMax(long fileSizeMax);
    设置单个文件的上传的大小上限。
     setSizeMax(long sizeMax);
    设置总文件上传的大小上限。
     setHeaderEncoding( Charset charset);
    使用charset的编码进行请求进行处理,可以解决文件上传中的中文乱码的问题。
    注意: 使用request.setCharacterEncoding ( Charset charset)也可以解决中文乱码问题,但是不建议使用。

<3.>FileItem类
 isFormField();
判断是否为上传组件。
 String getFieldName();
获取该组件的名称。既:<input>标签中的name属性。
 String getName();
获取上传文件中的名称。
注意:浏览器不同,得到的效果会不一样。
1.包含全路径名称: 比如:C:\User\Administrator\demo.txt
2.包含上传文件名称: 比如:demo.txt

 getString()、getString(Charset charset)
两者的区别:一个使用默认编码,一个使用指定编码。
可以获取非上传组件的内容。
如果上传组件是文本类型,也可以获取到其文本内容。
 getInputStream();
获取上传文件的内容的输入流,使用文件复制就能完成文件的上传。
 delete();
删除临时文件。

8 . 中文乱码问题
 上传文件名称乱码:
 使用ServletFileUpload中的setHeaderEncoding(Charset charset)方法。
 非上传组件内容乱码 :
 使用FileItem中的getString(Charset charset)方法。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值