zoukankan      html  css  js  c++  java
  • JavaWeb(实现文件下载)

    • 通过Servlet来实现文件的下载

    在使用JavaWeb文件的下载的时候,默认情况下,如果我们不指定

    content-type的时候 浏览器是无法判断如何去解析这个页面的,那它会怎么做呢,自动下载到本地

    当然要想让浏览器以文件的方式强制下载到桌面,可以使用          

    Content-Disposition=attachment;filename=xxx

    filename可以我们自己手动的去指定,如果不去指定的话,浏览器会默认下载当前静态网页的源码。

    参考下列一个简单的案例:

    package com.xyf.web6;
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    @WebServlet("/DownLoadServlet")
    public class DownLoadServlet extends HttpServlet {
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    	{
          this.doPost(request, response);
    	}
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		//将用户点击另存为到硬盘上
    //		doGet(request, response);
    		response.getWriter().println("hello");
    		//增加一句话
    	        response.addHeader("Content-Disposition","attachment");	
    	}
    
    }

    当服务器启动后

                  内容为hello的文件会自动询问用户是否需要下载。

                  

    打开后文件内容即为自己增加的hello这句话,当然我们无法将servlet的源码下载到本地的哦。

    好,现在我们大概理解了文件是如何下载的了,现在我们来看一下一个图片下载的案例吧

    图片下载案例    

    package com.xyf.web6;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    @WebServlet("/DownLoadServlet")
    public class DownLoadServlet extends HttpServlet {
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    	{
          this.doPost(request, response);
    	}
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String filename="testIamge.jpg";
    		//当文件名不是英文名的时候,最好使用url解码器去编码一下,
    		filename=URLEncoder.encode(filename,"UTF-8");
    	    //将响应的类型设置为图片
    		response.setContentType("image/jpeg");
            response.setHeader("Content-Disposition", "attachment;filename=" + filename);
    	    //好了 ,现在通过IO流来传送数据
            InputStream input=getServletContext().getResourceAsStream("/testImage.jpg");
            OutputStream output = response.getOutputStream();
    	    byte[]buff=new byte[1024*10];//可以自己 指定缓冲区的大小
            int len=0;
            while((len=input.read(buff))>-1)
            {
            	output.write(buff,0,len);
            }
            //关闭输入输出流
            input.close();
            output.close();
            
    	}
    
    }
    

    图片存放路径webcontent的下面、可以通过

      InputStream input=getServletContext().getResourceAsStream("/testImage.jpg");

    自己去配置图片的路径

    启动tomcat服务器后

    如此简单的实现了图片的下载。现在我们可以通过文件的下载功能满足日常任务的需要了。

    下一文将会说JavaWeb的文件上传,与文件上传的校验技术。

  • 相关阅读:
    2021,6,10 xjzx 模拟考试
    平衡树(二)——Treap
    AtCoder Beginner Contest 204 A-E简要题解
    POJ 2311 Cutting Game 题解
    Codeforces 990G GCD Counting 题解
    NOI2021 SDPTT D2T1 我已经完全理解了 DFS 序线段树 题解
    第三届山东省青少年创意编程与智能设计大赛总结
    Luogu P6042 「ACOI2020」学园祭 题解
    联合省选2021 游记
    Codeforces 1498E Two Houses 题解 —— 如何用结论吊打标算
  • 原文地址:https://www.cnblogs.com/a986771570/p/8076304.html
Copyright © 2011-2022 走看看