利用表单和servlet上传文件的操作
①单文件上传
表单代码
要上传文件,必须利用multipart/form-data设置HTML表单的enctype属性值
<form action="fileUpload" method="post" enctype="multipart/form-data">
<input type="text" name="name"/>
<input type="file" name="image"/>
<button>上传</button>
</form>
servlet代码
@WebServlet("/fileUpload2")
@MultipartConfig
public class FileUploadServlet2 extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//获取文本框输入的内容
String name = request.getParameter("name");
//获取上传图片的信息
Part part = request.getPart("image");//上传单个文件
//获取上传文件的名称
String fileName = part.getSubmittedFileName();
//修改上传文件的名称
String fileFistName = fileName.substring(0,fileName.lastIndexOf("."));//获取上传文件的名字
String type1 = fileName.substring(fileName.lastIndexOf("."));//获取上传文件的类型
if(".jpg".equalsIgnoreCase(type1)){//判断上传的文件是否是.jpg文件
String path = "D:\\tes"+ File.separator + new Date().getTime()+type1;//把文件上传到path这里
//File.separator + new Date().getTime()+type1:这是给上传的文件重新命名
//这里的new Date().getTime()是为了防止多次上传同一个文件,相同名称的文件会被覆盖
part.write(path);
}else if(".png".equalsIgnoreCase(type1)){//判断上传的文件是否是.jpg文件
String path = "D:\\tes"+ File.separator + new Date().getTime()+type1;//把文件上传到path这里
//File.separator + new Date().getTime()+type1:这是给上传的文件重新命名
part.write(path);
}else{
System.out.println("类型不通过!");
}
}
}
②上传多个文件
表单代码
form action="fileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="image"/>
<input type="file" name="image"/>
<input type="file" name="image"/>
<input type="file" name="image"/>
<button>上传</button>
</form>
servlet代码
@WebServlet("/fileUpload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//获取上传的所有对象
Collection<Part> list = request.getParts();
for(Part part:list){
String fileName = part.getSubmittedFileName();//获取到上传文件的名字
String path = "D:\\tes"+ File.separator+new Date().getTime()+fileName;//path是要上传到哪
part.write(path);
}
}
}
使用@MultipartConfig注解的作用:
①通过HttpServletRequest提供的getPart(String name)或getParts()方法获取到上传的文件,再使用Part相关的API获取文件信息以及完成上传。
②通过该注解提供的属性:maxFileSize、maxRequestSize等可以对上传文件大小、请求大小进行控制