文件上传
前端页面
注意:form标签的enctype属性要写成multipart/form-data
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>上传文件</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="name"><br>
密码:<input type="password" name="password"><br>
邮箱:<input type="text" name="name"><br>
头像:<input type="file" name="file"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
处理文件上传代码
package com.servlet;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
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 org.apache.tomcat.util.http.fileupload.FileItemIterator;
import org.apache.tomcat.util.http.fileupload.FileItemStream;
import org.apache.tomcat.util.http.fileupload.FileUploadException;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
// 注解配置servlet
@WebServlet("/upload")
public class Upload extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
FileItemIterator iter = upload.getItemIterator(request);
// 遍历每一个form表单的项目
while(iter.hasNext()) {
// 获取字节流
FileItemStream stream = iter.next();
// 这里做判断,true代表是普通控件
if(stream.isFormField()) {
InputStream input = stream.openStream();
InputStreamReader reader = new InputStreamReader(input , "UTF-8");
BufferedReader buffer = new BufferedReader(reader);
// 读取一行数据
String line = buffer.readLine();
// 获取控件的name值
System.out.println(stream.getFieldName()+":"+line);
// 关闭资源
buffer.close();
reader.close();
input.close();
}else {
// 获取字节流
InputStream input = stream.openStream();
// 拿到文件的后缀
String oldName = (stream.getName());
String suffix = oldName.substring(oldName.lastIndexOf("."));
// 使用时间给存储的文件起名
long filename = System.currentTimeMillis();
// 获取真实路径
String projectPath = (request.getRealPath("/WEB-INF/images/"));
System.out.println(projectPath);
// 文件输出流
OutputStream output =new FileOutputStream(projectPath+filename+suffix);
byte[] buffer = new byte[1024];
int length = 0;
while((length = input.read(buffer))!= -1) {
output.write(buffer, 0, length);
}
output.close();
input.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}