效果图:result3.jsp界面
demo08界面
TestUploadServlet类里的代码
package com.situ.lession0422;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.List;
import javax.servlet.ServletContext;
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.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/TestUploadServlet")
public class TestUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
boolean isMutipart = ServletFileUpload.isMultipartContent(request);
if (isMutipart) {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> fileItemList = upload.parseRequest(request);
for (FileItem fileItem : fileItemList) {
boolean isFormField = fileItem.isFormField();
if (isFormField) {
String fieldName = fileItem.getFieldName();
String fieldVal = fileItem.getString("utf-8");
System.out.println(fieldName + "=" + fieldVal);
} else {
String fieldName = fileItem.getFieldName();
System.out.println("type='file'的name=" + fieldName);
String fileName = fileItem.getName();
System.out.println("上传的文件名称=" + fileName);
String contenType = fileItem.getContentType();
System.out.println("上传的文件类型=" + contenType);
Long size = fileItem.getSize();
System.out.println("上传文件的大小=" + size + "byte");
InputStream inputStream = fileItem.getInputStream();
System.out.println("上传文件的输入流=" + inputStream);
ServletContext application = request.getServletContext();
String realPath = application.getRealPath("/");
System.out.println(realPath);
StringBuffer filePath = new StringBuffer("uploadfiles/");
filePath.append(Calendar.getInstance().getTimeInMillis())
.append(fileName.substring(fileName.lastIndexOf(".")));
System.out.println("写出文件的相对路径" + filePath);
File toFile = new File(realPath + filePath);
File parentFile = toFile.getParentFile();
if (!parentFile.exists()) {
parentFile.mkdirs();
}
OutputStream outputStream = new FileOutputStream(toFile);
int length = -1;
byte[] bytes = new byte[2048];
while ((length = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, length);
}
outputStream.close();
inputStream.close();
request.setAttribute("filePath", filePath);
request.getRequestDispatcher("result3.jsp").forward(request, response);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
demo08.jsp的代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- enctype="application/x-www-form-urlencoded" 默认值,表单以文本的方式提交
enctype="multipart/form-data"表单以二进制流的方式提交
表单二进制流的提交:
1.method = "post"
2.enctype="multipart/form-data"
-->
<form action="Test2UploadServlet" method="post" enctype="multipart/form-data">
用户名称:<input name ="userName" /><br/>
用户年龄:<input name = "userAge"/><br/>
用户头像:<input type = "file" name = "userFile"/><br/>
<input type = "submit" value="提交" />
<!-- <a href="result3.jsp" target="_blank">新窗口</a> -->
<input type = "reset" value="重置" />
</form>
</body>
</html>
result3.jsp的代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>上传文件完成</h1>
<h3>${filePath}</h3>
<img alt="" src="${filePath}">
</body>
</html>