前端页面
必须要用post请求
解析: enctype=“multipart/form-data”
enctype就是encodetype就是编码类型的意思。
multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。
默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传
只有使用了multipart/form-data,才能完整的传递文件数据。
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/8/23
Time: 15:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
<meta http-equiv="content-type" content="text/html" charset="utf-8"/>
</head>
<body>
<form method="post" action="upload" enctype="multipart/form-data">
请选择上传文件:
<input type="file" name="file" id="file"><br/><br/>
<input type="submit" value="上传" name="upload" id="upload">
</form>
</body>
</html>
上传
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
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 = "FileUploadServlet", urlPatterns = {"/upload"})
@WebServlet("/upload")
//说明该Servlet处理的是multipart/form-data类型的请求
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
/*
* ServletContext代表是一个web应用的上下文对象(web应用对象)
* 里面封装的都是web应用信息
* 一个ServletContext对应一个应用
* 在服务器一启动的时候就会创建,在服务器关闭的时候销毁
*
*
* */
ServletContext servletContext = this.getServletContext();
String realPath = servletContext.getRealPath("/upload");
System.out.println(realPath);
final Part filePart = request.getPart("file");
final String fileName = getFileName(filePart);
File file = new File(realPath);
if (!file.exists()) {
if (file.mkdirs()){
System.out.println("okokok");
} else {
System.out.println("wrong");
}
}
OutputStream out = null;
InputStream filecontent = null;
try (PrintWriter writer = response.getWriter()) {
try {
out = new FileOutputStream(new File(realPath + File.separator + fileName));
filecontent = filePart.getInputStream();
int read;
final byte[] bytes = new byte[1024];
while ((read = filecontent.read(bytes)) != -1) {
System.out.println(bytes[0]);
out.write(bytes, 0, read);
}
writer.println("上传文件 " + fileName + " 到路径 " + realPath);
} catch (FileNotFoundException fne) {
writer.println("没有指定上传文件或上传目的路径错误。");
writer.println("<br/> 错误: " + fne.getMessage());
} finally {
if (out != null) {
out.close();
}
if (filecontent != null) {
filecontent.close();
}
if (writer != null) {
writer.close();
}
}
}
}
private String getFileName(final Part part) {
for (String content : part.getHeader("content-disposition").split(";")) {
if (content.trim().startsWith("filename")) {
String filename = content.substring(
content.lastIndexOf('\\') + 1).trim().replace("\"", "");
return filename;
}
}
return null;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}