文件上传
上传文件对表单的要求(前端<form>)
1.请求方式为post method="post"
2.enctype="multipart/form-data"
3.使用 文件表单项上传文件
用户名:<input type="text" name="username">
文件:<input type="file" name="photo">
<input type="submit" value="提交">
对servlet限制
1.request.getParameter()方法不能再使用
即使用了也获取的是null
2.request.getInputStream()来获取所有消息体数据
使用第三方工具类,来解析请求体中的文件的数据
1.导入jar包
commons-fileupload.jar
commons-io.jar
2.创建解析器工厂
new DiskFileItemFactory();
3.获取解析器
new ServletFileUpload(diskFileItemFactory);
4.解析request对象 返回List<FileItem> (表单项对象集合)
servletFileUpload.parseRequest(request);
5.遍历集合 获取每一个表单项 获取数据
for(FileItem fileItem : list)
判断是否是普通表单项
boolean b = fileItem.isFormField();
获取表单项name名称
fileItem.getFieldName();
true 表示普通表单项
if("username".equals(fieldName))
获取表单项的值
String name = fileItem.getString();
false 表示文件表单项
getName();获取文件名
getSize();获取文件大小 单位字节
getContentType();获取文件类型
将文件写入硬盘
这个upload文件夹一开始判断一下,如果不存在,要用代码创建出来
File dir = new File(this.getServletContext().getRealPath("/upload"));
File file = new File(dir,name);
fileItem.write(file);
快速入门
@WebServlet(value = "/fileUpload", name = "FileUploadServlet")
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
List<FileItem> list = servletFileUpload.parseRequest(request);
String uname = null;
String upwd = null;
for (FileItem fileItem : list) {
boolean formField = fileItem.isFormField();