文件的上传及下载.docVIP

  • 5
  • 0
  • 约9.67千字
  • 约 8页
  • 2017-06-05 发布于湖北
  • 举报
20121227 周四 文件的上传和下载 1. What is 文件上传? what is 文件下载? 文件上传:用户通过浏览器向服务器提交文件,并由服务器保存 文件下载:用户通过浏览器从服务器上得到一些文件数据,并在浏览器端保存 2. Why use 文件上传? Why use 文件下载? web应用功能需要 3. How 实现文件上传? ** 实现文件上传的流程 1、在jsp页面添加form表单: (1) input type=file (2) 必须把 form 的 enctype 属性设为 multipart/form-data, enctype 属性取值: application/x-www-form-urlencoded:表单 enctype 属性的默认值。这种编码方案使用有限的字符集,当使用了非字母和数字时,必须用”%HH”代替(H 代表十六进制数字)。对于大容量的二进制数据或包含非 ASCII 字符的文本来说,这种编码不能满足要求。 multipart/form-data:form 设定了enctype=“multipart/form-data”属性后,表示表单以二进制传输数据 。在浏览器在上传文件时,将把文件数据附带在 http 请求消息体中,并使用 MIME 协议对上传文件进行描述,以方便接收方对上传数据进行解析和处理。 (3) 表单提交的方式要是 post(get的请求体有大小限制,而post无大小限制) 注意:enctype=“multipart/form-data”的表单在servlet中不能再像以往那样通过 request.getParameter()那样得到请求中的参数数据(数据格式不对),另有取值的方式 2、为了方便用户处理上传数据,Apache 提供了一个用来处理表单文件上传的开源组件: Commons-fileupload 和Commons-io ,Commons-fileupload 组件从 1.1 版本开始依赖 commons-io 其主要的接口和类有三个: ServletFileUpload 负责处理上传的文件数据,并将每部分的数据封装成一到 FileItem 对象中。 isMultipartContent(HttpServletRequest request) 判断上传表单是否为 multipart/form-data parseRequest(HttpServletRequest request) :得到请求所有表单项的数据对象,返回一 个ListFileItem setFileSizeMax(long fileSizeMax) 设置上传文件的最大值。 setSizeMax(long sizeMax) 设置上传文件总量的最大值 2.DiskFileItemFactory 是创建 FileItem 对象的工厂,在这个工厂类中可以配置内存缓冲区大小和存放临时文件的目录。 setSizeThreshold(int sizeThreshold,File repository ) 设置内存缓冲区的大小,默认值为 10k 当上传文件大于缓冲区大小时,fileupload 组件将使用临时文件缓存上传文件 setRepository(File repository) 指定临时文件目录,默认值为 System.getProperty(java.io.tmpdir) FileItem :代表一个表单项数据,可以获得表单项的数据,可以判断是否为普通表单项 isFormField():为true,为普通表单项;为false,为file表单项 getFieldName() 获取的是普通表单项的表单项名。 getString(encod) 获取的是普通表单项的表单项值。 getName() 获取的是上传文件的简单文件名(有些浏览器(ie)会返回文件的全路径 名,所有在此处最好加以判断) 3. 基本的原理为: FileUpload组件将页面提交的所有元素(普通form表单域,如text和文件域file)都看作一样的FileItem,这样上传页面提交的 request请求也就是一个FileItem的有序组合,FileUpload组件可以解析该request,并返回一个一个的FileItem。而对每一个FileItem,FileUpload组件可以判断出它是普通form表单域还是文件file域,从而根据不同的类型,采取不同的操作--如果是表单域,就读出其值,如果是文件域,就保存文件到服务器硬盘上或者内存中。 4、fileuplpad 组件的具体工作流程

文档评论(0)

1亿VIP精品文档

相关文档