文件的上传总结
前言
文件的上传和下载,在web项目的开发中都是非常常见的,而且知识点也很重要。所以今天小编就来总结一下,希望能够帮助到向我这样的小白。
一、文件的上传介绍(重点)
1.上传要求
(1)jsp文件需要有一个form标签,以及method=post请求;
(2)form标签的encType属性值必须为multipart/from-data值;
(3)在form标签中使用input type=file添加上传的文件;
(4)编写Servlet程序接受,处理上传的数据。
其中,encType=multipart/from-data表示提交的数据,以多段的形式进行拼接,然后以二进制的形式发送给服务器。
2.导包
在接触了web项目开发后,很多情况下代码都不用我们自己去写,而是拿别人封装好的类库直接使用,所以在文件上传时,我们要导入commons-fileupload.jar。
又因为commons-fileupload.jar需要依赖commons-io.jar这个包,所以两个包我们都需要导入。
commons-fileupload-1.2.1,jar
commons-io-1.4.jar
二、常用类
1.在上述两个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 所指向抽硬盘位置 。
2.上传时类库的使用
(1)上传文件时的表单及其属性值
<form action="http://localhost/upload/uploadServlet" method="post"
enctype="multipart/form-data>
用户名:<input type="text" name="username"><br>
头像:<input type="file" name="photo"></br>
<input type="submit" value="上传">
</form>
(2)文件上传时的代码
@Override
protected void doPost(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
//1 先判断上传的数据是否多段数据(只有是多段的数据,才是文件上传的)
if (ServletFileUpload.isMultipartContent(req)) {
// 创建 FileItemFactory 工厂实现类
FileItemFactory fileItemFactory = new DiskFileItemFactory();
// 创建用于解析上传数据的工具类 ServletFileUpload 类
ServletFileUpload servletFileUpload = new
ServletFileUpload(fileItemFactory);
try {
// 解析上传的数据,得到每一个表单项 FileItem
List<FileItem> list = servletFileUpload.parseRequest(req);
// 循环判断,每一个表单项,是普通类型,还是上传的文件
for (FileItem fileItem : list) {
if (fileItem.isFormField()) {
// 普通表单项
System.out.println("表单项的 name 属性值:" + fileItem.getFieldName());
// 参数 UTF-8.解决乱码问题
System.out.println("表单项的 value 属性值:" + fileItem.getString("UTF-8"));
} else {
// 上传的文件
System.out.println("表单项的 name 属性值:" + fileItem.getFieldName());
System.out.println("上传的文件名:" + fileItem.getName());
fileItem.write(new File("e:\\" + fileItem.getName()));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
总结
上述的jar包、表单的设计以及Servlet程序的编写,就是一种最简单的文件上传。希望能对小白们有所帮助。