1.文件上传三要素
提供form表单,method必须是post!
form表单的enctype必须是multipart/form-data
提供 input type="file" 类型长传输入
2 实现文件上传
导入: file-upload的jar包
3.编写上传页面
###############################以下展示文件上传##############################################
@WebServlet("/uploadServlet")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//编写上传的代码
//想好,要将我的内容上传到什么地方
//1、初始化工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//2 、上传解析器
ServletFileUpload fileUpload = new ServletFileUpload(factory);
//3、判断该表单是否是上传表单
boolean result = ServletFileUpload.isMultipartContent(request);
//如果不是程序结束
if(!result) {
return;
}
//4、
try {
/*
* 如果表单是enctype="multipart/form-data"
* 意味着 request是不能获取到输入框的值的,所有都不能
*/
//System.out.println(request.getParameter("name"));
//System.out.println(request.getParameter("fileName"));
// ServletContext 整个项目的环境,tomcat启动,该对象产生,最重要的作用可以获取绝对路径
// 服务器上的 C:/sdfsdfs/sdfsd/webapps/路径名字的路径
// /user/local/ssdfsdf/webapps/虚拟路径名字
String realPath = this.getServletContext().getRealPath("./");
System.out.println(realPath);
File fileDir = new File(realPath+"\\upload");
if(!fileDir.exists()) {
fileDir.mkdir();
}
realPath = realPath+"\\upload";
List<FileItem> list = fileUpload.parseRequest(request);
for (FileItem fileItem : list) {
if(fileItem.isFormField()) { //普通输入框
String inputName = fileItem.getFieldName();// name
String value = fileItem.getString();//如果有乱码 getString("字符集的形式") "张三"
System.out.println(inputName +","+value);
}else {
String fileName = fileItem.getName();//获取文件上传的名字
System.out.println(fileName);
//IO流
InputStream inputStream = fileItem.getInputStream();
String suffixName = fileName.substring(fileName.lastIndexOf("."));// .jpg .png .txt
//String path = "C:\\Users\\yanzhenwei\\javaee-workspace2\\JavaWeb14\\WebContent\\upload";
//System.out.println(realPath);
String newName = UUIDUtils.getUUID()+suffixName;
System.out.println(newName);
OutputStream outputStream = new FileOutputStream(new File(realPath+"\\"+newName));
int length = 0;
byte[] arr =new byte[1024*100];
while((length=inputStream.read(arr)) != -1) {
outputStream.write(arr, 0, length);
outputStream.flush();
}
outputStream.close();
inputStream.close();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}