JavaWeb04 实现文件下载

JavaWeb04 实现文件下载

java在实现文件下载功能时有两种方式,一种是通过超链接的方式,另一种是通过代码的方式来实现的。

1、通过超链接实现

  • 先在eclipse中创建一个动态网页工程。名称符合命名规范即可。然后在WebContent中创建一个htmt文件。该网页则为我们启动服务器时默认打开的网页。而我们以a标签形式下载文件的代码也在其中编写。
  • 我们在WebContent中创建一个file文件夹,并将要下载的文件放在其中。
    在这里插入图片描述
  • 然后就可以在html中编写a标签了
<h1>第一种下载方式:通过超链接</h1><br/>
<a href="file/1.png">下载1.png</a><br/>
<a href="DownFileServlet?filename=file/第一章.txt">下载第一章.txt</a><br/>
<a href="file/jbit.log">下载jbit.log</a><br/>
<a href="file/SpringMVCMybatis.rar">下载SpringMVCMybatis.rar</a><br/>

这里需要注意a标签中href的路径

  • 开启Tomcat服务器,运行html文件
    在这里插入图片描述
    但是当我们点击下载1.png时,浏览器会自动给我们打开该文件而不是提供下载。
    在这里插入图片描述
    而当我们点击下载SpringMVCMybatis.rar时,浏览器就会给我们提供下载。
    在这里插入图片描述
    这是为什么呢?
    原因就是通过超链接的方式下载文件时,当遇到浏览器可以识别的文件类型时,浏览器就会给我们自动打开,当浏览器识别不了时才会给我们提供下载。这也是通过超链接下载的一种弊端。

2、通过代码下载

以Servlet形式下载则可以设置以附件的形式下载。这样浏览器就不会出现上面所说的现象

  • 首先,创建一个Servlet,命名为DownFileServlet。
    在这里插入图片描述
  • 然后我们在01.html中设置以Servlet形式下载
<h1>第二种下载方式:通过代码</h1><br/>
<a href="DownFileServlet?filename=file/1.png">下载1.png</a><br/>
<a href="DownFileServlet?filename=file/jbit.log">下载jbit.log</a><br/>
<a href="DownFileServlet?filename=file/SpringMVCMybatis.rar">下载SpringMVCMybatis.rar</a><br/>
<a href="DownFileServlet?filename=file/第一章.txt">下载第一章.txt</a><br/>
<a href="DownFileServlet?filename=file/第二章进程管理.txt">下载第二章进程管理.txt</a><br/>

其中herf中的路径指向的是Servlet,而后面的filename是我们传入Sevlet的参数,因为我们要以Servlet方式下载,所以我们必须告诉Servlet,我们要下载的是哪个文件。之后我们便可以设置Servlet了。

  • 设置Servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//获取文件的名称 
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		String fileName=request.getParameter("filename");
		System.out.println(fileName);
		String type=request.getServletContext().getMimeType(fileName);
		//设置响应头信息 Content-type 
		response.setHeader("Content-Type", type);
		//设置响应头信息 Content-Disposition 让浏览器以下载的方式打开文件 并进行编码以保证中文不乱码
		response.setHeader("Content-Disposition", "attachment;filename="+ new String( fileName.getBytes("UTF-8"),"ISO-8859-1"));
		//创建流 输入和输出
	    //获取文件的本地路径
		ServletContext application=this.getServletContext();   
		System.out.println(application.getRealPath("/")+"\\"+fileName);
		InputStream in=new FileInputStream(application.getRealPath("/")+"\\"+fileName);
		OutputStream out=response.getOutputStream();
		int len=0;
		byte[] b=new byte[1024];
		while((len=in.read(b))!=-1){
			out.write(b, 0, len);
		}
		in.close();
		out.close();
	}

当然,不同浏览器有不同的编码格式,这里就不逐一去弄了,大家可以自己试试。

  • 开启Tomcat服务器,运行html。
    在这里插入图片描述
  • 我们点击下载时,就都可以下载了
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值