注:Servlet3.0及以上版本使用,以下版本需要用第三方工具,本方法不适用
HTML
<fieldset>
<legend>上传单个文件</legend>
<form action="acceptfile" enctype="multipart/form-data" method="post">
上传文件:<input type="file" name="file"><br>
<input type="submit" value="上传">
</form>
</fieldset>
Servlet
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;
import java.io.*;
import java.util.Collection;
@MultipartConfig( maxRequestSize = 30000000,maxFileSize= 10000000)
//注解,设置上传文件总量上限,设置单个文件大小上限
@WebServlet(value = "/acceptfile" )
public class AcceptFileServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) {
try{
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//设置文件接收路径
String savepath=request.getServletContext().getRealPath("/WEB-INF/uploadfile");
//判断有没有文件夹,没有自动创建
File f=new File(savepath);
if(!f.exists())f.mkdirs();
Collection<Part> parts=request.getParts();
//判断是单文件还是多文件
if(parts.size()==1){
Part part=request.getPart("file");
String filename=savepath+File.separator+getFileName(part.getHeader("content-disposition"));
File file=new File(filename);
if(!file.exists())file.createNewFile();
//File.separator就是自动根据系统选择/和\路径分隔符
part.write(filename);
}else{
for (Part part:parts){
String filename=savepath+File.separator+getFileName(part.getHeader("content-disposition"));
File file=new File(filename);
if(!file.exists())file.createNewFile();
part.write(filename);
}
}
PrintWriter out=response.getWriter();
out.println("上传成功");
out.close();
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void doPost(HttpServletRequest request,HttpServletResponse response) {
this.doGet(request,response);
}
//从http报头获取文件名
public String getFileName(String header){
String[] temparr1=header.split(";");
int p=temparr1[2].indexOf('=');//找到第一个等号
String temparr2=temparr1[2].substring(p+1);//去掉第一个等号以及,文件名前后的两个引号
return temparr2.substring(temparr2.lastIndexOf("\\")+1).replace("\"","");
}
}
context.xml
<Context allowCasualMultipartParsing="true">tomcat添加属性值