JavaWeb—文件的上传和下载
文件的上传
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单上传</title> </head> <body> <!--enctype="multipart/form-data"必须要有这个--> <form method="post" enctype="multipart/form-data" action="uploadServlet"> 姓名:<input type="text" name="uname"> <br> 文件:<input type="file" name="myfile"> <br> <button type="submit">提交</button> </form> </body> </html>
@WebServlet("/uploadServlet") @MultipartConfig//如果是文件上传一定要加这个注解 public class UploadServlet extends HttpServlet { /** * 文件上传..... * uname: 张三 * 上传的文件名: 徐裴_简历.docx * 文件存放的路径:D:\IdeaProjects\demo02\out\artifacts\demo02_war_exploded\ */ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("文件上传....."); //设置请求的编码格式 request.setCharacterEncoding("UTF-8"); //获取普通的表单项(获取参数) String uname = request.getParameter("uname"); System.out.println("uname: " + uname); //获取Part对象 Servlet将multipart/form-data的POST封装成Part对象 Part part = request.getPart("myfile");//表单中文件域值 //通过Part对象得到上传的文件名 String fileName = part.getSubmittedFileName(); System.out.println("上传的文件名: " + fileName); String filePath = request.getServletContext().getRealPath("/"); System.out.println("文件存放的路径:" + filePath); //上传文件到指定的路径 part.write(filePath + "/" + fileName); } }
文件的下载
(1)超链接实现下载
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件下载</title> </head> <body> <!--超链接下载--> <!--浏览器能够识别的资源--> <a href="download/1.txt" >文本文件</a> <a href="download/1.png">图片文件</a> <!--浏览器不能识别的资源--> <a href="download/apache-tomcat-8.5.63-windows-x64.zip">压缩文件</a> <hr> <!--download可以不用设置属性值,会自动使用默认文件名,如果设置了download属性,就使用设置的属性名字--> <a href="download/1.txt" download>文本文件</a> <a href="download/1.png" download="考研必刷题">图片文件</a> </body> </html>
这里的文件是自己添加在包里的:
(2)后台实现下载
<form action="downloadServlet"> 文件名:<input type="text" name="fileName" placeholder="请输入要下载的文件名"> <button>下载</button> </form>
@WebServlet("/downloadServlet") public class DownloadServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("文件下载..."); //设置请求的编码 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); //获取参数(得到想要下载的文件名) String fileName = request.getParameter("fileName"); //参数的非空判断 fileName.trim()去除字符串的前后空格 if(fileName == null || "".equals(fileName.trim())) { response.getWriter().write("请输入想要下载的文件名!"); response.getWriter().close(); return; } //得到图片存放的路径 String path = request.getServletContext().getRealPath("/download/"); //通过路径得到file对象 File file = new File(path + fileName); //判断文件是否存在和是否为一个标准文件 if(file.exists() && file.isFile()) { //文件下载的方法 //设置响应类型 response.setContentType("application/x-msdownload"); //设置响应头 response.setHeader("Content-Disposition","attachment;filename=" + fileName); //得到输入流 InputStream in = new FileInputStream(file); //得到输出流 ServletOutputStream out = response.getOutputStream(); //定义byte数组 byte[] bytes = new byte[1024]; //定义长度 int len = 0; //循环输出 while((len = in.read(bytes)) != -1) { //输出 out.write(bytes, 0, len); } //关闭资源 out.close(); in.close(); } else { response.getWriter().write("文件不存在,请重试!"); response.getWriter().close(); } } }