文件的上传和下载

文件的上传和下载,是非常常见饿的功能。很多系统中,或者软件中都经常使用文件的上传和下载。

(比如:QQ头像,就是使用了上传)

文件的上传介绍

1.要有一个form标签:method=post请求(使用post请求的原因:是post请求不限制url地址的长度)

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

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

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

 

 

 (jsp页面)

enctype="multipart/form-data"

】表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器。

http协议内容(尚硅谷网课资料)

 

 

 (上传的数据不在页面中显示是因为数据的长度太长,需要使用服务器读取)

使用流的形式进行上传,服务器只能用流的形式进行读取

 

 

 服务器对接收到的信息进行解析

需要使用jar包自动进行解析

1.commons-fileupload.jar

commons-fileupload.jar 需要依赖 commons-io.jar 这个包,所以两个包我们都要引入。
第一步,就是需要导入两个 jar 包:
  commons-fileupload-1.2.1.jar
  commons-io-1.4.jar

 

 

 
commons-fileupload.jar 和 commons-io.jar 包中,我们常用的类有哪些?
 
ServletFileUpload 类,用于解析上传的数据。
FileItem 类,表示每一个表单项。
 
boolean ServletFileUpload.isMultipartContent(HttpServletRequest request);
  判断当前上传的数据格式是否是多段的格式。
 
public List<FileItem> parseRequest(HttpServletRequest request)
  解析上传的数据
 
boolean FileItem.isFormField()
  判断当前这个表单项,是否是普通的表单项。还是上传的文件类型。
  true 表示普通类型的表单项
  false 表示上传的文件类型
 
String FileItem.getFieldName()
  获取表单项的 name 属性值String FileItem.getString()
  获取当前表单项的值。
 
String FileItem.getName();
  获取上传的文件名
 
void FileItem.write( file );
  将上传的文件写到 参数 file 所指向抽硬盘位置 。
代码:

 

 

 

 

 

 

 

文件的下载

下载的原理(尚硅谷资料):

 

 代码:

 

 下载文件中文乱码问题解决方案:

方案一:URLEncoder 解决 IE 和谷歌浏览器的 附件中
文名问题。
如果客户端浏览器是 IE 浏览器 或者 是谷歌浏览器。我们需要使用 URLEncoder 类先对中文名进行 UTF-8 的编码
操作。
因为 IE 浏览器和谷歌浏览器收到含有编码后的字符串后会以 UTF-8 字符集进行解码显示
 
// 把中文名进行 UTF-8 编码操作。
String str = "attachment; fileName=" + URLEncoder.encode("中文.jpg", "UTF-8");
// 然后把编码后的字符串设置到响应头中
response.setHeader("Content-Disposition", str);
 
方案二:BASE64 编解码 解决 火狐浏览器的附件中文名问
如果客户端浏览器是火狐浏览器。 那么我们需要对中文名进行 BASE64 的编码操作。
这时候需要把请求头 Content-Disposition: attachment; filename=中文名
编码成为:Content-Disposition: attachment; filename==?charset?B?xxxxx?=
=?charset?B?xxxxx?=     现在我们对这段内容进行一下说明。
=?             表示编码内容的开始
charset          表示字符集
B              表示 BASE64 编码
xxxx            表示文件名 BASE64 编码后的内容
?=             表示编码内容的结束
posted @ 2021-11-10 10:48  Soleili  阅读(289)  评论(0编辑  收藏  举报