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)方法。

 转载:https://blog.csdn.net/pseudonym_/article/details/71436025

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值