Servlet 实现文件上传需要先接收request 发送请求的文件域,然后获取需要上传文件的名字,之后设置文件的存放地址,然后通过
Servlet实现文件上传主要分以下几个步骤
- 接收需要进行上传的文件域
- 获取上传文件名字
- 自定义文件存放路径
- 创建目录
- 上传至指定路径
注意事项
- form 需要设置 enctype=“multipart/form-data”
- Servlet 中需要加入@MultipartConfig注解
参考代码如下:
Servlet:
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;
import java.io.File;
import java.io.IOException;
@WebServlet("/FileUploadServlet")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=UTF-8");
//创建文件域
Part part = req.getPart("pic");
//获取文件名字
String fileName = part.getSubmittedFileName();
//重命名文件
String newFilename = System.currentTimeMillis()+fileName.substring(fileName.lastIndexOf("."));
//设置文件存取路径
String filePath = this.getServletContext().getRealPath("/");
filePath = filePath.substring(0,filePath.lastIndexOf("w"))+"upload/";
this.getServletContext().log("上传路径为:" + filePath);
//创建目录
File f = new File(filePath);
//上传文件
if (!f.exists()) f.mkdirs();
part.write(filePath + "/" + newFilename);
}
}
前端:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="/FileUploadServlet">
图片: <input type="file" name="pic"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>