> 文档中心 > 文件的上传与下载

文件的上传与下载


文件上传介绍

  1. 要有一个form标签,method=post 请求

  2. form标签的 encType 属性值必须为multipart/form-data 值

  3. 在form标签中使用input type=file添加上传的文件

  4. 编写服务器代码接收,处理上传的数据。

    文件上传时发送的HTTP协议内容

commons-fileupload.jar常用API介绍说明

1、导入commons-fileupload.jar和commons-io.jar包

2、包中常用类:

ServletFileUpload类,用于解析上传的数据。

Fileltem类, 表示每一个表单项。

boolean ServletFileUpload.isMultipartContent(HttpServletRequest request);

判断当前上传的数据格式是否是多段的格式。

public List parseRequest(HttpServletRequest request)

解析上传的数据

boolean FileItem.isFormField()

判断当前这个表单项,是否是普通的表单项。还是上传的文件类型。

true 表示普通类型的表单项

false 表示上传的文件类型

String FileItem.getFieldName();

获取表单项name属性值

String FileItem.getString();

获取当前表单项的值

String FileItem.getName();

获取上传的文件名

String FileItem.write( file );

将上传的文件写到 参数file所指向的磁盘上

文件下载的实现

response.getoutputStream( ) ;servletContext.getResourceAsStream();servletContext.getMimeType();response.setContentType();

response.setHeader("Content-Disposition", "attachment; fileName=1.jpg"); 这个响应头告诉浏览器。这是需要下载的。而attachment表示附件,也就是下载的一个文件。fileName=后面,示下载的文件名。

完成上面的两个步骤,下载文件是没问题了。但是如果我们要下载的文件是中文名的话。你会发现,下载无法正确显示出中文名。

原因是在响应头中,不能包含有中文字符,只能包含ASCII码。

解决方法:

 

通过判断请求头中 User-Agent 这个请求头携带过来的浏览器信息即可判断出是什么浏览器

String ua = request.getHeader("User-Agent");// 判断是否是火狐浏览器if (ua.contains("Firefox")) {// 使用下面的格式进行 BASE64 编码后String str = "attachment; fileName= " + " = ? utf-8?B?"new BASE64Encoder().encode("中文.jpg".getBytes("utf-8")) + "?=";// 设置到响应头中response.setHeader("Content-Disposition", str);} else {// 把中文名进行 UTF-8 编码操作。String str = "attachment; fileName=" + URLEncoder.encode("中文.jpg", "UTF-8");// 然后把编码后的字符串设置到响应头中response.setHeader("Content-Disposition", str);}