1、jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2020/4/11
Time: 17:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--文件以二进制的形式进行传输--%>
<form enctype="multipart/form-data" action="/upload" method="post" >
文本框 <input type="text" name="text"> <br>
请上传一个文本型的文件 <input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
2、servlet
一定要先导入两个jar包(版本不限)
commons-fileupload-1.4.jar
commons-io-2.6.jar
package com.dzu.servlet;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
@WebServlet("/upload")
public class upload extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 工厂形式的上传方式 上传文件的必要步骤
req.setCharacterEncoding("UTF-8");
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
// 解析req请求得到一个文件列表
try {
List<FileItem> list = servletFileUpload.parseRequest(req);
System.out.println(list);
for (FileItem item:list){
// isFormField 表示是否为一个文件 返回true 则表示 不是一个文件
if (item.isFormField()){
// 由于不是文件所以 getName 方法为空
System.out.println("文件的真实名字:"+item.getName());
String textName = item.getFieldName();
String textValue = item.getString("UTF-8");
System.out.println(textName+":"+textValue);
}else {
//现在是一个文件
String fileName = item.getName();
long size = item.getSize();
System.out.println(fileName+":"+size+"Byte");
// 构建一个输入流
InputStream inputStream = item.getInputStream();
String path = req.getServletContext().getRealPath("file/"+fileName);
System.out.println("文件路径为"+path);
OutputStream outputStream = new FileOutputStream(path);
int temp = 0;
while ((temp=inputStream.read())!=-1){
outputStream.write(temp);
}
outputStream.close();
inputStream.close();
System.out.println("文件上传完毕");
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}