package edu.hhsy.servlets;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
@WebServlet(name = "UploadServlet",urlPatterns = "/UploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html,charset=utf-8");
PrintWriter writer=response.getWriter();
DiskFileItemFactory factory = new DiskFileItemFactory();
File f = new File("F:\\zxf");
if (!f.exists()) {
f.mkdirs();
}
factory.setRepository(f);
ServletFileUpload fileUpload = new ServletFileUpload(factory);
fileUpload.setHeaderEncoding("utf-8");
//response.getWriter();
try {
List<FileItem> fileitems = fileUpload.parseRequest(request);
for (FileItem fileitem : fileitems) {
if (fileitem.isFormField()) {
// 获得字段名和字段值
String name = fileitem.getFieldName();
if (name.equals("name")) {
//如果文件不为空,将其保存在value中
if (!fileitem.getString().equals("")) {
String value = fileitem.getString("utf-8");
writer.print("上传者:" + value + "<br />");
}
}
} else {
// 获取上传的文件名
String filename = fileitem.getName();
//处理上传文件
if (filename != null && !filename.equals("")) {
response.getWriter().print("上传的文件名称是:" + filename + "<br />");
// 截取出文件名
filename = filename.substring(filename.lastIndexOf("\\") + 1);
// 文件名需要唯一
//filename = UUID.randomUUID().toString() + "_" + filename;
// 在服务器创建同名文件
String webPath = "/upload/";
//将服务器中文件夹路径与文件名组合成完整的服务器端路径
String filepath = getServletContext()
.getRealPath(webPath + filename);
// 创建文件
File file = new File(filepath);
file.getParentFile().mkdirs();
file.createNewFile();
// 获得上传文件流
InputStream in = fileitem.getInputStream();
// 使用FileOutputStream打开服务器端的上传文件
FileOutputStream out = new FileOutputStream(file);
// 流的拷贝
byte[] buffer = new byte[1024];//每次读取1个字节
int len;
//开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中
while ((len = in.read(buffer)) > 0)
out.write(buffer, 0, len);
// 关闭流
in.close();
out.close();
// 删除临时文件
fileitem.delete();
writer.print("上传文件成功!<br />");
}
}
}
} catch (Exception e) {
System.out.println("Exception");
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}