美文网首页
关于servlet下载单文件

关于servlet下载单文件

作者: 邪恶的正派 | 来源:发表于2018-05-17 10:03 被阅读0次

            从事IT行业,已经很长一段时间了。很多东西还处于初级阶段。比如,简单的servlet下载,自己还是无法理解。以前,一直在想,servlet的下载怎么才能够让前端响应,让别人知道有没有文件呢?至少没有文件的时候,可以提醒别人。通常,我会写两个servlet,一个用来判断文件是否存在,一个用来下载用的。上周做项目的时候,发现,并不需要那样做,完全可以在一个servlet里面处理了。毕竟是笔记,直接贴代码吧。


    public class DownloadServlet extends HttpServlet {

        private static final long serialVersionUID = 1L;

        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");

    response.setCharacterEncoding("utf-8");

    response.setContentType("text/plain;charset=utf-8");

    response.setHeader("Access-Control-Allow-Origin", "*");

    String file_name =ObjectToString(request.getParameter("name"));

    String contactPath = Configs.get("FileInConfig.filepath");  // 步骤一(换成自己的某个文件路径)

    //String xx = getServletContext().getRealPath("/");

    String fileSaveRootPath = (Session.getHttpSession().getServletContext().getRealPath("/").replace("\\", "/")).replace("/./", "/")+contactPath.substring(contactPath.indexOf("war/")+3); //拼接完整路径    // 步骤二(换成自己的完整路径)

    //String file_name =ObjectToString(fileMap.get("FILE_NAME"));

    String server_name =new String(request.getParameter("servername").getBytes("ISO-8859-1"), "UTF-8");

    File file = new File(contactPath+file_name);

    OutputStream os = null;

    if(!file.exists()){

    JSONObject json = new JSONObject();

    System.out.println("文件不存在!");

    json.put("retcode", "0");

    json.put("retmsg", "没有文件");

    response.getWriter().print(json);

    }else{

    os = response.getOutputStream();

    response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(server_name, "UTF-8"));

    FileInputStream in = new FileInputStream(fileSaveRootPath+file_name);

    //创建缓冲区

    byte[] buffer = new byte[1024];

    int len = 0;

    //循环将输入流中的内容读取到缓冲区当中

    while((len=in.read(buffer))>0){

    //输出缓冲区的内容到浏览器,实现文件下载

    os.write(buffer, 0, len);

    }

    //关闭文件输入流

    in.close();

    //关闭输出流

    os.close();

    }

    if(null != os){

    os.flush();

    os.close();

    }

    }

    public static String ObjectToString(Object o) {

    return o == null ? "" : o.toString().trim();

    }

        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            doGet(request, response);

        }

    }

    通过上面的servlet,name为文件名,直接访问servlet,如果没有文件,会直接响应应到前台,有文件,就直接下载了。前端可以通过代码:

    window.location.href = "servlet地址"  就能下载了。

    相关文章

      网友评论

          本文标题:关于servlet下载单文件

          本文链接:https://www.haomeiwen.com/subject/yxwyqftx.html