暑假在家研究了一下文件上传的方法,虽然只是单一文件的上传,但是万一以后会有用呢,所以在这里记录一下,大多数内容从网上整理,揉合而成,现在已经找不到出处了。
后端代码:
package servlet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLDecoder;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class Upload extends HttpServlet {
private String fileName="";
private String uploadPath="";//此处填写上传文件的保存地址。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
try {
//接受上传文件
//1、创建磁盘文件项工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//2、创建文件上传的核心类
ServletFileUpload upload = new ServletFileUpload(factory);
//3、解析request---获得文件项集合
List<FileItem> parseRequest = upload.parseRequest(request);
//4、遍历文件项集合
for(FileItem item : parseRequest){
//5、判断普通表单项/文件上传项
boolean formField = item.isFormField();//是否是一个普通表单项
if(formField){
//普通表单项
String fieldName = item.getFieldName();
String fieldValue = item.getString();
fieldValue=URLDecoder.decode(fieldValue, "utf-8");
fileName=fieldValue;
}else{
//文件上传项
//获得上传文件的名称
String fileName = item.getName();
//fileName=URLDecoder.decode(fileName,"utf-8");
//获得上传文件的内容
InputStream in = item.getInputStream();
//将in中的数据拷贝服务器上
String path = this.getServletContext().getRealPath("/media");
Date date=new Date();
//
//此处为新文件名,一般加上后缀,如:上传abc.mp4——保存为——abc(此处为当前时间).mp4
String newFileName=fileName.substring(0, fileName.lastIndexOf('.'))+'('+date.getTime()+')'+fileName.substring(fileName.lastIndexOf('.')-1);
//uploadPath为私有数据成员
FileOutputStream out=new FileOutputStream(uploadPath+'/'+newFileName);
int len = 0;
byte[] buffer = new byte[1024];
while((len=in.read(buffer))>0){
out.write(buffer, 0, len);
}
in.close();
out.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
前端代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/dormLeague/upload" method="post" enctype="multipart/form-data">
<input type="text" name="username"><br>
<input type="file" name="filename"><br>
<input type="submit" value="上传文件">
</form>
</body>
</html>