serlet文件的上传下载
文件的上传
- 文件的上传(表单)
1.表单提交方法:method="post"
2.表单类型:enctype="multipart/form-data"
3.表单元素类型 文件类型设置name属性<!--前端代码--> <form action="/three" method="post" enctype="multipart/form-data"> 请求参数:<input type="file" name="fileName"/><br/><br/> <input type="submit" value="文件上传"/> </form> //后端的servlet代码 package com.test.controller; //servlet文件上传 import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; import java.io.IOException; /* * 如果表单的类型enctype="multipart/form-data",对应servlet一定加注解@Multipart * 如果没有加注解,所有参数都会为null * */ @MultipartConfig public class uploadOfForm extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置编码格式 req.setCharacterEncoding("utf-8"); //文件上传 //req.getPart(name);得到文件上传的对象,name代表的是file文件域的name属性值 Part part = req.getPart("fileName"); //得到文件名 String submittedFileName = part.getSubmittedFileName(); if(submittedFileName!=null && !submittedFileName.equals("")){ //设置文件的存放路径 String realPath = req.getServletContext().getRealPath("uploadFile"); //把传入的文件写入 part.write(realPath+submittedFileName); } } }
文件的下载
1.文件的下载(一、通过超链接的特性下载)
当我们在HTML或 JSP页面中使用a标签时,原意是希望能够进行跳转,但当超链接遇到浏览器不识另的资源
时会自动下载;当遇见浏览器能够直接显示的资源,浏览器就会默认显示出来,比如txt、png、jpg等。当然
我们也可以通过download 属性规定浏览器进行下载。但有些浏览器并不支持。
<!--当超链接遇到浏览器不能识别的资源时,会自动下载--> <a href="test.zip">超链接下载</a>
指定download属性下载
<!--当超链接遇到浏览器识别的资源时,默认不会下载。通过download属性可进行下载--> <a href="test.txt" download>
download属性可以不写任何信息,会自动使用默认文件名。如果设置了download属性的值,则使用设置的值做为文件名。当用户打开浏览器点击链接的时候就会直接下载文件。
2.文件的下载(二、后台实现下载)
实现步骤:
- 要通过response.setContentType方法设置Content-type头字段的值,为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,
例如"application/octet-stream"或"application/x-msdownload"等。 - 需要通过response.setHeader方法设置Content-Disposition头的值为"attachment,filename=文件名"
- 读取下载文件,调用response.getOutputStream方法向客户端写入附件内容。
代码的实现package com.test.controller; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class download extends HttpServlet { //文件的下载 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取要下载的文件名 String fileName = req.getParameter("fileName"); //判断文件名是否为空 if(fileName==null){ System.out.println("请求文件名为空"); return; } //要下载的文件路径 String realPath = req.getServletContext().getRealPath("/uploadFile"); //通过文件名在文件路径中获取对应文件 System.out.println(realPath+fileName); File file =new File(realPath+fileName); if (file.exists()&&file.isFile()){ //设置响应类型 resp.setContentType("application/x-msdownload"); //设置响应头 resp.setHeader("Content-Disposition","attachment,filename="+fileName); //获取输入流 FileInputStream fileInputStream = new FileInputStream(file); //获取输出流 ServletOutputStream outputStream = resp.getOutputStream(); //读取文件并把文件写入 byte[] bytes = new byte[1024]; int len =0; while ((len=fileInputStream.read(bytes))!=-1){ outputStream.write(bytes,0,len); } outputStream.close(); fileInputStream.close(); } } }
浙公网安备 33010602011771号