使用Tomact,servlet,HTML等,实现网页图片,视频的下载
servlet类:
package Dawnload; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; import java.io.IOException; @WebServlet("/downloadservlet") public class downloadservlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取请求参数,文件名称 String filename = request.getParameter("filename"); //找到文件服务器路径 javax.servlet.ServletContext servletContext1 = this.getServletContext(); String realPath = servletContext1.getRealPath("/img/" + filename); //使用字节流关联 FileInputStream fileInputStream = new FileInputStream(realPath); //设置响应头类型 String mimeType = servletContext1.getMimeType(filename); response.setHeader("content-type",mimeType); //设置中文乱码问题 //获取user-agent请求头 String agent = request.getHeader("user-agent"); //使用 工具类方法 编码文件名即可 filename = coding.getfilename(agent,filename); //设置响应头打开方式 response.setHeader("content-disposition","attachment;filename"+filename); //将输入流的数据写出到输出流中 ServletOutputStream outputStream = response.getOutputStream(); byte[] bytes = new byte[1024 * 8]; int len = 0; while ((len = fileInputStream.read(bytes)) != -1) { outputStream.write(bytes, 0, len); } fileInputStream.close(); //关闭字节输入流 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
工具类:
设置浏览器默认编码方式,解决文件名的中文乱码问题
package Dawnload; import com.mchange.util.Base64Encoder; import com.mchange.util.Base64FormatException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class coding { public static String getfilename(String agent , String filename) { try { filename = URLEncoder.encode(filename,"utf-8"); filename = filename.replace("+",""); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return filename; } }
HTML文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>下载</title> </head> <body> <a href="/Java_Servlet/downloadservlet?filename=夏日.jpg">图片1</a> <a href="/Java_Servlet/downloadservlet?filename=夏日.avi">视频1</a> </body> </html>
效果图: