所需的包
上传demo
index.html
主要代码:
enctype=“multipart/form-data”
type=“file”
post方式
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="text" name="fileName" /><br>
<input type="file" name="uploadFile" />
<input type="submit" value="upload" />
</form>
</body>
</html>
servlet:
主要代码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> list= upload.parseRequest(request);
for(FileItem item : list) {
if(item.isFormField()) {//判断是否是普通表单
System.out.println(item.getFieldName()+":"+item.getString());
}else {//不是普通表单,上传的是文件
//获取要上传路径
String path = this.getServletContext().getRealPath("/upload");
String name = ""+System.currentTimeMillis();//获取当前格林尼治时间
String ext = item.getName().substring(item.getName().lastIndexOf("."), item.getName().length());//获取文件后缀
item.write(new File(path+"/"+name+ext));
}
}
} catch (Exception e) {
e.printStackTrace();
}
response.getWriter().print("upload ok");
}
- 文本类型数据(如:Text、Select等)传送数据到服务器端时,使用的编码方式为:
enctype="application/x-www-form-urlencoded" - 若要传送文件至服务器端,必须使用enctype="multipart/form-data"
由于在传送数据时所使用的编码方式不同,因此在接收客户端传来的文件数据时,不能直接使用request.getParameter()方法
- 使用request.getInputStream方法可以获得客户端浏览器POST方式传来的数据流,但得到的数据流还包括一些其他信息
- getServletContext().getRealPath()方法取得服务器端某文件的实际路径
== Apache commons-fileupload ==
- commons-fileupload是目前JavaWeb应用最广泛的上传组件
- commons-fileupload组件需要有commons-io组件的支持
- 步骤
- 创建DiskFileItemFactory
- 使用factory创建一个ServletFileUpload
- 使用parseRequest方法解析request得到FileItem列表
- 用FileItem的write方法写到一个目标文件中(自己起文件名)