文件上传:
将文件通过表单上传到服务器,服务器从request中将文件读取到输入流
在将输入流中的数据 通过输出流写入目的文件夹下即可
文件上传的步骤
1、创建fileupload.html
2、创建fileuploadServlet
3、导入jar包
4、编码
代码
1、创建fileupload.html
注意:1、文件上传请求方式只能用post
2、设置编码类型为:enctype=“multipart/form-data”(默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data,才能完整的传递文件数据。)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<form action="/fileUploadServlet" method="post" enctype="multipart/form-data">
上传文件<input type="file" name="file">
<input type="submit">
</form>
</body>
</html>
2、创建fileuploadServlet
package com.load;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;
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.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@WebServlet(value = "/fileUploadServlet",name = "/FileUploadServlet")
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、设置编码格式
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//2、创建文件上传核心对象DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
//3、文件上传对象
ServletFileUpload upload = new ServletFileUpload(factory);
//设置相关参数
upload.setHeaderEncoding("utf-8");//防止中文名乱码
upload.setFileSizeMax(1024*1024*5);//单位:b
//4、解析request,将请求中的数据封装成FileItem
try {
List<FileItem> list = upload.parseRequest(request);
//遍历集合解析数据
for (FileItem item : list) {
//判断是否是文件
if(item.isFormField()){//普通字段
}else{//表示是文件
//获取文件名
String filename = item.getName();
//解决浏览器上传文件名不同问题
filename = FileUtils.getRealFileName(filename);
// filename = FileUtils.getUUIDFileName(filename);//可以设置带uuid的文件名
//确定存储路径
String filepath = "E:\\file";
File file = new File(filepath);
if(!file.exists()){
file.mkdirs();
}
//拼接上传路径
filepath = filepath+File.separator+filename;
System.out.println(filepath);
//获取输入流
InputStream in = item.getInputStream();
//获取输出流
FileOutputStream out = new FileOutputStream(filepath);
//复制
IOUtils.copy(in, out);
out.close();
in.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response );
}
}
/**
* 获取真实的文件名
* @param name
* @return
*/
public static String getRealFileName(String name){
int index = name.lastIndexOf("\\");
return name.substring(index+1);
}
/**
* 生成文件名
* @param name
* @return
*/
public static String getUUIDFileName(String name){
UUID uuid = UUID.randomUUID();
String s = uuid.toString().replaceAll("-", "");
return s+name;
}
jar包:百度云链接:https://pan.baidu.com/s/18VaL3oz3ZsQAesSlf2Yj2w
提取码:oe34