diff --git a/homework6/.idea/MarsCodeWorkspaceAppSettings.xml b/homework6/.idea/MarsCodeWorkspaceAppSettings.xml new file mode 100644 index 0000000..05ed8ba --- /dev/null +++ b/homework6/.idea/MarsCodeWorkspaceAppSettings.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/homework6/.idea/encodings.xml b/homework6/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/homework6/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/homework6/.idea/misc.xml b/homework6/.idea/misc.xml index 6ed36dd..132404b 100644 --- a/homework6/.idea/misc.xml +++ b/homework6/.idea/misc.xml @@ -1,4 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/homework6/.idea/vcs.xml b/homework6/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/homework6/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/homework6/pom.xml b/homework6/pom.xml index 19226ed..af9d20b 100644 --- a/homework6/pom.xml +++ b/homework6/pom.xml @@ -1,48 +1,75 @@ - - 4.0.0 + 4.0.0 - com.msksbr - homework6 - 1.0-SNAPSHOT - homework6 - war + com.msksbr + homework6 + 1.0-SNAPSHOT + homework6 + war - - UTF-8 - 1.8 - 1.8 - 5.10.2 - + + UTF-8 + 1.8 + 1.8 + 5.10.2 + - - - javax.servlet - javax.servlet-api - 4.0.1 - provided - - - org.junit.jupiter - junit-jupiter-api - ${junit.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - test - + + + + commons-fileupload + commons-fileupload + 1.3.3 + + + + commons-io + commons-io + 2.7 + + + + javax.servlet.jsp.jstl + javax.servlet.jsp.jstl-api + 1.2.2 + + + + org.apache.taglibs + taglibs-standard-impl + 1.2.5 + runtime + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + - - - - org.apache.maven.plugins - maven-war-plugin - 3.3.2 - - + + + + org.apache.maven.plugins + maven-war-plugin + 3.3.2 + + + \ No newline at end of file diff --git a/homework6/src/main/java/com/msksbr/homework6/fileupload/DownloadServlet.java b/homework6/src/main/java/com/msksbr/homework6/fileupload/DownloadServlet.java new file mode 100644 index 0000000..84c73a5 --- /dev/null +++ b/homework6/src/main/java/com/msksbr/homework6/fileupload/DownloadServlet.java @@ -0,0 +1,45 @@ +package com.msksbr.homework6.fileupload; + +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 java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +@WebServlet(name = "DownloadServlet", urlPatterns = "/DownloadServlet") +public class DownloadServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + + public void doGet(HttpServletRequest request, HttpServletResponse + response) throws ServletException, IOException { + //设置ContentType字段值 + response.setContentType("text/html;charset=utf-8"); + //获取所要下载的文件名称 + String filename = request.getParameter("filename"); + //下载文件所在目录 + String folder = "/upload/"; + // 通知浏览器以下载的方式打开 + response.addHeader("Content-Type", "application/octet-stream"); + response.addHeader("Content-Disposition", + "attachment;filename=" + filename); + folder = folder + filename; + // 通过文件流读取文件 + InputStream in = getServletContext().getResourceAsStream(folder); + // 获取response对象的输出流 + OutputStream out = response.getOutputStream(); + byte[] buffer = new byte[1024]; + int len; + //循环取出流中的数据 + while ((len = in.read(buffer)) != -1) { + out.write(buffer, 0, len); + } + } + + public void doPost(HttpServletRequest request, HttpServletResponse + response) throws ServletException, IOException { + doGet(request, response); + } +} diff --git a/homework6/src/main/java/com/msksbr/homework6/fileupload/UploadServlet.java b/homework6/src/main/java/com/msksbr/homework6/fileupload/UploadServlet.java new file mode 100644 index 0000000..a5e289d --- /dev/null +++ b/homework6/src/main/java/com/msksbr/homework6/fileupload/UploadServlet.java @@ -0,0 +1,104 @@ +package com.msksbr.homework6.fileupload; + +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; +import java.util.UUID; + +@WebServlet(name = "UploadServlet", value = "/UploadServlet") +@MultipartConfig +public class UploadServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + + public void doGet(HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + try { + //设置ContentType字段值 + response.setContentType("text/html;charset=utf-8"); + // 创建DiskFileItemFactory工厂对象 + DiskFileItemFactory factory = new DiskFileItemFactory(); + //设置文件缓存目录,如果该目录不存在则新创建一个 + File f = new File("uploadTemp"); + if (!f.exists()) { + f.mkdirs(); + } + // 设置文件的缓存路径 + factory.setRepository(f); + // 创建 ServletFileUpload对象 + ServletFileUpload fileupload = new ServletFileUpload(factory); + //设置字符编码 + fileupload.setHeaderEncoding("utf-8"); + // 解析 request,得到上传文件的FileItem对象 + List fileitems = fileupload.parseRequest(request); + //获取字符流 + PrintWriter writer = response.getWriter(); + // 遍历集合 + 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 + "
"); + } + } + } else { + // 获取上传的文件名 + String filename = fileitem.getName(); + //处理上传文件 + if (filename != null && !filename.equals("")) { + writer.print("上传的文件名称是:" + filename + "
"); + // 截取出文件名 + filename = filename.substring(filename.lastIndexOf("\\") + 1); + // 文件名需要唯一 + filename = UUID.randomUUID() + "_" + 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("上传文件成功!
"); + } + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void doPost(HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + doGet(request, response); + } +} diff --git a/homework6/src/main/webapp/download.jsp b/homework6/src/main/webapp/download.jsp new file mode 100644 index 0000000..7002186 --- /dev/null +++ b/homework6/src/main/webapp/download.jsp @@ -0,0 +1,11 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 文件下载 + + + + 文件下载 + + diff --git a/homework6/src/main/webapp/form.jsp b/homework6/src/main/webapp/form.jsp new file mode 100644 index 0000000..c6fdc84 --- /dev/null +++ b/homework6/src/main/webapp/form.jsp @@ -0,0 +1,22 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + +
+ + + + + + + + + + + +
上传者
上传文件
+
+ + \ No newline at end of file