美文网首页
关于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下载单文件

    从事IT行业,已经很长一段时间了。很多东西还处于初级阶段。比如,简单的servlet下载,自己还是无法理解。以前,...

  • 3.文件下载

    1.普通文件下载 2.使用servlet程序下载(推荐)

  • Servlet 实现文件下载

    Servlet 实现文件下载 在生活或者工作中,总是避免不了下载文件,下载的东西有各种类型,譬如图片,视频,文本,...

  • 文件上传与下载(一)简单实现

    在慕课找到了一节关于java Web上传、下载问题的内容。内容总体包括: Jsp + Servlet 简单实现文件...

  • 文件上传与下载

    Servlet实现文件上传与下载 所需包:commons-fileupload-1.2.1.jarcommons-...

  • vue 下载

    下载单文件 下载多文件 下载应用 生成二维码

  • SpringMVC之文件上传和下载

    SpringMVC实现文件的上传和下载相对于JavaWeb阶段我们使用过servlet实现文件上传和下载操作;而S...

  • Servlet文件上传与下载

    需要导入的jar包有:commons-fileupload、commons-io、commons-logging,...

  • 文件下载用servlet实现

    一般来说文件下载需要的步骤为: (1)获得客户端请求的文件的名称 (2)获得服务器端的真实的物理路径 (3)创建目...

  • SpringBoot 文件上传下载

    YML配置 单文件上传 多文件上传 文件下载

网友评论

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

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