javaweb中的文件上传之fileupload组件

  今天我们来说一说如何完成文件上传。

  1.概述

  ① 文件上传指的是将文件通过浏览器传输到服务器或者指定的磁盘中。

  ② 在一个表单中我们首先要使用file组件来上传,因为get请求无法携带大数据的请求参数,所以必须使用post方式,然后表单的编码方式也必须设置为encrytype="multipy/form-data"(这个是浏览器发送文件到服务器时,文件的编码格式为二进制的意思),这样我们就可以在服务器端的Servlet中进行接收了,但是无法再使用request.getParameter()的方式来接收,因为数据传输的格式已经变为二进制了,此时应该用request.getInputStream()的方式来接收获取参数文件的二进制流。之后再进行其他操作。

  需要注意的是:虽然这种方式也可以完成文件的上传,但是我们不推荐使用这种原始的reqeust.getInputStream()来获取上传的文件,因为它处理起来太单调,无法像fileupload组件可以设置形如:最大上传文件大小等参数。

  ③ 我们推荐使用:fileupload组件完成文件的上传。

  2.fileupload组件完成上传

  ① 使用准备:导入common-fileupload.jar和common-io.jar包的导入

  ② 基本思路:

  我们可以通过common-fileupload组件当中的API获取一个由FileItem组成的额List,然后调用每一个FileItem的isFormFiled()方法判断当前的这个FileItem是一个表单域(非文件上传组件)还是一个文件域(文件上传组件),如果是表达域,可以通过FIleItem的getFiledName()和getFiledValue()获取表单当中的名称和值。如果是文件域,可以通过FileItem获取属性名,文件名,内容类型,是否在内存中,上传文件的大小,文件内容的输入流等等信息。

  3.获取FileItem组成的List

  两种方式

  ① 简单方式

  FileItemFactory factory = new DiskFileItemFactry();--获取FileItem的创建工厂FileItemFactory

  ServletFileUpload upload =new ServleFileUpload(factory);  --将FileItem的创建工厂实例传入到ServletFileUpload实例中进行初始化

  List items = upload.parseRequest(request);  --从请求reqeust中将上传的二进制文件转换为FileItem对象

  ② 复杂方式

  FileItemFactory factory = new DiskFileItemFactry();--获取FileItem的创建工厂FileItemFactory

  factory.setThreshold(设置文件上传时允许的最大值,若超过,则将文件放入指定的临时磁盘目录下)

  factory.setRepository(设置临时磁盘的位置)

  ServletFileUpload upload =new ServleFileUpload(factory);  --将FileItem的创建工厂实例传入到ServletFileUpload实例中进行初始化

  upload.setSizeMax(设置允许上传的文件的总的大小,单位是byte,比特)

  List items = upload.parseRequest(request);  --从请求reqeust中将上传的二进制文件转换为FileItem对象













你可能感兴趣的:(javaweb中的文件上传之fileupload组件)