Servlet下载服务器文件

来源:互联网 发布:bugclose 源码下载 编辑:程序博客网 时间:2024/05/18 12:37

背景:最近得到一个需求,为了抓取比较纯净的流量,需要在给定的服务器上搭建一个服务器,从客户端访问搭建的服务器,下载服务器上的文件,下载过程中抓取流量。

一:服务器只用过Apache的Tcmcat,就用Tomcat

二:思路,在服务器上搭建一个web项目服务,在客户端去访问,下载文件。

三:下面给出比较麻烦的一块(利用Servlet进行文件下载)


通过JS调用Servlet进行文件下载:

前台代码:

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>文件下载 |homepage</title><script src="./jquery-3.1.1.min.js"></script><script>function Download(){var url=document.getElementById("url").value;if(url!=""){$.post("/CeShi/FileServlet",{URL:url},function(data,status){alert(status);});}else alert("please input file_url");}</script></head><body><div><h2 align='center'> 文件下载</h2></div><div>File_URL:<br><input type="text" name="file_url" id="url" value="not use" style="width:300px; "><br></div><div><p></p><button id='submit' onclick="Download()">下载特定文件</button></div></body></html>
Servlet代码:

package com.servlet;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class Download */public class FileServlet extends HttpServlet {private static final long serialVersionUID = 1L;           /**     * @see HttpServlet#HttpServlet()     */    public FileServlet() {        super();        // TODO Auto-generated constructor stub    }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String fullpath=request.getParameter("URL");File f = new File(fullpath);if(f.exists()){String filename=URLEncoder.encode(f.getName(),"UTF-8"); //解决中文文件名下载后乱码的问题  System.out.println(filename); //设置文件MIME类型          response.setContentType(getServletContext().getMimeType(filename));         //设置Content-Disposition          response.setHeader("Content-Disposition", "attachment;filename="+filename);        InputStream in = new FileInputStream(f);          OutputStream os = response.getOutputStream();         BufferedOutputStream out = new BufferedOutputStream(os);        byte[] len = new byte[1024*2];        int read = 0;        while((read=in.read(len)) != -1){        out.write(len, 0, read);        System.out.println("--------------------reading-------------");        }        out.flush();        out.close();        in.close();}}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}
注意:

这样并不会弹出下载文件框,但是文件是可以写到流中的,要想弹出文件下载框,查询资料说得需要通过window.location.href访问Servlet.

<button id='submit' onclick="javascript:window.location.href='/ROOT/FileServlet';">下载特定文件</button>


参考:

http://blog.csdn.net/longshengguoji/article/details/39433307

http://blog.csdn.net/lingling_jy/article/details/8191107

原创粉丝点击