话不多说,直接贴代码
UploadServletTest.java
package com.ujiuye.servlet;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
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.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* Servlet implementation class UploadServletTest
*/
@WebServlet("/uploadServletTest")
public class UploadServletTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 自己推理的方法
// fileUploadFunc1(request,response);
try {
// 2. 使用第三方包 将文件上传到项目目录下
// fileUploadFunc2(request,response);
// 3. 使用第三方包 将文件上传到磁盘下
fileUploadFunc3(request,response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void fileUploadFunc3(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
// 1. 判断form表单 enctype="multipart/form-data"
boolean multipartContent = ServletFileUpload.isMultipartContent(request);
if(multipartContent) {
// 2. 处理文件上传
// 2.0 创建磁盘解析工厂类
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2.1 创建核心解析类
ServletFileUpload upload = new ServletFileUpload(factory);
// 4. 解决中文文件名乱码
upload.setHeaderEncoding("UTF-8");
// 8. 监听上传进度
upload.setProgressListener(new ProgressListener() {
// 参数1:已上传的大小 参数2:总大小 参数3:状态码
@Override
public void update(long arg0, long arg1, int arg2) {
// TODO Auto-generated method stub
System.out.println("已上传:"+arg0+",总大小:"+arg1+",状态:"+arg2);
}
});
// 7. 限制文件上传的大小
// 7.1 文件上传的总大小
// upload.setSizeMax(1024*1024*10); // 1TB = 1024GB = 1024*1024MB = 1024*1024*1024KB
upload.setFileSizeMax(1024*1024*5);
// 2.2 开始解析
List<FileItem> fileItems = upload.parseRequest(request);
// 2.3 判断FileItem 是普通的输入框还是文件上传
for (FileItem fileItem : fileItems) {
if(fileItem.isFormField()) {
// 普通的输入框
String name = fileItem.getFieldName();
// 3. 解决普通输入框文本乱码问题
// String value = fileItem.getString();
String value = fileItem.getString("UTF-8");
System.out.println(name+"===>"+value);
}else {
// 文件上传
// 1. 获取文件名
String filename = fileItem.getName();
if("".equals(filename)) {
continue;
}
System.out.println("文件名:"+filename);
// 5. 随机文件名
String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();
// System.out.println(uuid);
filename = uuid+filename.substring(filename.indexOf("."));
System.out.println(filename);
// 9. 文件目录
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String format2 = format.format(new Date());
// 2. 指定文件上传的路径
File dir = new File("D://img//"+format2);
if(!dir.exists()) {
dir.mkdirs();
}
// 3. 将文件名 放入file路径中
File file = new File(dir, filename);
System.out.println("保存路径:"+file);
// 4. 将文件内容放入文件中
fileItem.write(file);
}
}
}
}
private void fileUploadFunc2(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 1. 检查我们是否有文件上传请求 判断form表单 enctype="multipart/form-data"
boolean multipartContent = ServletFileUpload.isMultipartContent(request);
// 2. true 文件上传 false 普通的form请求
if(multipartContent) {
// 3. 处理文件上传
// 3.0 创建磁盘解析工厂类
DiskFileItemFactory factory = new DiskFileItemFactory();
// 3.1 创建核心解析类
ServletFileUpload upload = new ServletFileUpload(factory);
// 3.2 开始解析 form中的 每一个 input 输入框: FileItem
List<FileItem> fileItems = upload.parseRequest(request);
// 3.3 找不同的type 不同的处理
for (FileItem fileItem : fileItems) {
// 3.4 判断是否是 普通的input 框 还是 文件上传 type=file
if(fileItem.isFormField()) {
// 普通的输入框 只需要获取 name 和 value
String name = fileItem.getFieldName();
String value = fileItem.getString();
System.out.println(name+":::"+value);
}else {
// 文件上传
// 1. 获取文件名
String filename = fileItem.getName();
System.out.println("文件名:"+filename);
// 2. 指定存放路径
String realPath = getServletContext().getRealPath("/image");
File dir = new File(realPath);
if(!dir.exists()) {
dir.mkdirs();
}
// 3. 将内容和文件名字 放入路径中
File file = new File(dir, filename);
System.out.println("保存路径:"+file);
// 4. 将内容写进去
fileItem.write(file);
}
}
}
}
private void fileUploadFunc1(HttpServletRequest request, HttpServletResponse response) throws IOException {
// TODO Auto-generated method stub
// 1. 获取请求数据
// String desc = request.getParameter("desc");
//
// String file = request.getParameter("file1");
//
// System.out.println(desc+"::"+file);
// 2. 获取请求数据 但是数据包含文件和form表单的
ServletInputStream inputStream = request.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buff = new byte[4*1024];
int len = 0;
while((len=inputStream.read(buff))!=-1) {
baos.write(buff, 0, len);
baos.flush();
}
byte[] byteArray = baos.toByteArray();
System.out.println(new String(byteArray));
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function checkFile(){
var f1 = document.getElementById("f1");
// files[0] 当前input中的file文件
var file = f1.files[0];
// 获取文件大小
var size = file.size;
// alert(size);
if(size>1024*1024*5){
alert(file.name+":过大,不能上传!");
}else{
var fm = document.getElementById("fm");
fm.submit();
}
}
</script>
</head>
<body>
<form id="fm" action="uploadServletTest" method="post" enctype="multipart/form-data">
<input type="text" name="desc" /><br />
<input id="f1" type="file" name="file1" /><br />
<input type="button" onclick="checkFile()" value="上传"/>
</form>
</body>
</html>
img.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<img alt="" src="/images/book2.jpg">
</body>
</html>
1万+

被折叠的 条评论
为什么被折叠?



