文件上传
- Part接口代表上传的文件或表单数据
- Part接口的常用方法
方法 | 说明 |
---|---|
String getName() | 获取控件的name属性 |
long getSize() | 获取上传文件的大小,单位是字节 |
InputStream getInputStream() | 获取输入流,用于检索文件的内容 |
void write(String fileName) | 将上传的文件写入磁盘 |
String getHearder(String name) | 获取指定part请求头信息 |
Collection getHearders(String name) | 获取指定名称所有请求头的信息 |
Collection getHearderNames() | 获取所有请求头的名称 |
String getContentType() | 获取文件MIME类型 |
单个文件上传
JSP页面
<form action="fileup" enctype="multipart/form-data" method="post">
姓名:<input name="name" type="text"/><br/>
头像:<input name="file" type="file"> <br/>
<input type="submit" value="提交"/>
servlet
package cn.bdqn.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet (name="fileup servlet",urlPatterns="/fileup")
@MultipartConfig
public class FileuploadServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Part part=req.getPart("file");
System.out.println("文件的名称:"+part.getSubmittedFileName());
System.out.println("文件大小:"+part.getSize());
System.out.println("文件的类型:"+part.getContentType());
//将文件保存到上传路径 getServletContext
String uploadFile=getServletContext().getRealPath("upload");
File file=new File(uploadFile);
System.out.println(111);
//如果目录不存在,就创建
if (!file.exists()) {
file.mkdir();
}
System.out.println("文件上传路径"+uploadFile);
System.out.println(222);
//上传 File.separator 文件分隔符 \\ 真实需修改命名规则,以防重复覆盖
part.write(uploadFile+File.separator+part.getSubmittedFileName());
}
}
多个文件上传
JSP页面
<form action="fileup" enctype="multipart/form-data" method="post">
姓名:<input name="name" type="text"/><br/>
头像:<input name="file" type="file"> <br/>
头像1:<input name="file1" type="file"> <br/>
<input type="submit" value="提交"/>
servlet
package cn.bdqn.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet (name="fileup servlet",urlPatterns="/fileup")
@MultipartConfig
public class FileuploadServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//将文件保存到上传路径 getServletContext
String uploadFile=getServletContext().getRealPath("upload");
File file=new File(uploadFile);
System.out.println(111);
//如果目录不存在,就创建
if (!file.exists()) {
file.mkdir();
}
System.out.println("文件上传路径"+uploadFile);
Collection<Part> parts=req.getParts();
for(Part part:parts) {
// part.getName() 获取前台
if (part.getName().startsWith("file")) {
System.out.println("文件的名称:"+part.getSubmittedFileName());
System.out.println("文件大小:"+part.getSize());
System.out.println("文件的类型:"+part.getContentType());
//上传 File.separator 文件分隔符 \\ 真实需修改命名规则,以防重复覆盖
part.write(uploadFile+File.separator+part.getSubmittedFileName());
}
}
}
}
限制单个文件上传类型
package cn.bdqn.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet (name="fileup servlet",urlPatterns="/fileup")
@MultipartConfig
public class FileuploadServlet extends HttpServlet {
//允许的文件上传类型
private final String Allow_IMG_TYPE="image/png;image/jpeg";
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//将文件保存到上传路径 getServletContext
String uploadFile=getServletContext().getRealPath("upload");
File file=new File(uploadFile);
//如果目录不存在,就创建
if (!file.exists()) {
file.mkdir();
}
System.out.println("文件上传路径"+uploadFile);
Part part=req.getPart("file");
// part.getName() 获取前台
if(Arrays.asList(Allow_IMG_TYPE.split(";")).contains(part.getContentType())) {
System.out.println("文件的名称:"+part.getSubmittedFileName());
System.out.println("文件大小:"+part.getSize());
System.out.println("文件的类型:"+part.getContentType());
//上传 File.separator 文件分隔符 \\ 真实需修改命名规则,以防重复覆盖
part.write(uploadFile+File.separator+part.getSubmittedFileName());
}else {
resp.setContentType("text.html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("不支持此文件类型的上传,只支持image/png和image/jpeg");
}
}
}
文件上传大小限制
使用注解,只能报错阻难,需要try … catch
package cn.bdqn.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet (name="fileup servlet",urlPatterns="/fileup")
@MultipartConfig
public class FileuploadServlet extends HttpServlet {
//允许的文件上传类型
private final String Allow_IMG_TYPE="image/png;image/jpeg";
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//将文件保存到上传路径 getServletContext
String uploadFile=getServletContext().getRealPath("upload");
File file=new File(uploadFile);
//如果目录不存在,就创建
if (!file.exists()) {
file.mkdir();
}
System.out.println("文件上传路径"+uploadFile);
//反射,获取注解信息
Part part=req.getPart("file");
// part.getName() 获取前台
//限制类型
if(Arrays.asList(Allow_IMG_TYPE.split(";")).contains(part.getContentType())) {
//限制大小
if(part.getSize()> 1024*100*2) {
resp.setContentType("text.html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("文件大小炒熟200kb");
return;
}
System.out.println("文件的名称:"+part.getSubmittedFileName());
System.out.println("文件大小:"+part.getSize());
System.out.println("文件的类型:"+part.getContentType());
//上传 File.separator 文件分隔符 \\ 真实需修改命名规则,以防重复覆盖
part.write(uploadFile+File.separator+part.getSubmittedFileName());
}else {
resp.setContentType("text.html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("不支持此文件类型的上传,只支持image/png和image/jpeg");
}
}
}