本篇主要讲述通过java servlet来实现文件的上传功能。
1.工程需要有commons-fileupload.jar以及commons-io.jar的支持。
2.文件上传页面以及上传成功的消息提示页面
uploadfile.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>文件上传下载</title>
</head>
<body>
<form id="upanddownfile" action="UpandDownFileServlet"
enctype="multipart/form-data" method="post">
<input type="text" name="username" /> <br /> <input type="file"
name="file1"> <input type="file" name="file2"> <input
type="submit" value="提交">
</form>
</body>
</html>
success.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>上传成功</title>
</head>
<body>
${message}
</body>
</html>
uploadFileServlet.java
“`
package com.upanddown.servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UpandDownFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UpandDownFileServlet() {
super();
}
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//得到上传文件的保存目录,如果不存在,则新建目录。
String savePath = this.getServletContext().getRealPath(
"/WEB-INF/upload");
File file = new File(savePath);
// 判断目录文件是否存在,如果不存在,则创建目录
if (!file.exists() && !file.isDirectory()) {
file.mkdir();
}
// 消息提示
String message = "";
//通过Apache提供的文件上传组件实现文件上传
//1.创建一个DiskFileItemFactory类
DiskFileItemFactory factory = new DiskFileItemFactory();
//2.创建上传文件解析器
ServletFileUpload upload = new ServletFileUpload(factory);
//解决上传文件名中文乱码问题
upload.setHeaderEncoding("utf-8");
//3.判断上传的数据是否是表单提交数据
if (!upload.isMultipartContent(request)) {
return;
}
try {
//使用servlet文件解析器解析上传文件,返回一个List<FileItem>
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
//如果fileitem封装的是普通数据
if (item.isFormField()) {
String name = item.getFieldName();
//解决普通输入项中文件乱码问题
String value = item.getString("UTF-8");
} else {
//如果上传的是文件类型
//得到上传的文件名
String filename = item.getName();
if (filename == null || filename.trim().equals("")) {
continue;
}
//处理获取到的上传文件的名称的路径部分,只保留文件名部分
filename = filename.substring(filename
.lastIndexOf("\\")+1);
//获取item文件的输入流
InputStream in = item.getInputStream();
//创建一个文件输出流
FileOutputStream out = new FileOutputStream(savePath + "\\"
+ filename);
//创建缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流中的信息读取到缓冲区内
while ((len = in.read(buffer)) > 0) {
//使用FileOutputStream输出流将缓冲区内的写到指定的目录中
out.write(buffer, 0, len);
}
//关闭输入流
in.close();
//关闭输出流
out.close();
//删除临时文件
item.delete();
message = "文件上传成功";
}
}
} catch (FileUploadException e) {
message = "文件上传失败";
e.printStackTrace();
}
request.setAttribute("message", message);
request.getRequestDispatcher("/NewFile.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
“`亲测有效