yuy

从网上下载文件几乎是每个人都会遇到的,不管是图片、文本文件还是一些视频,但是我们真的知道在下载的过程中发生了什么吗?本文章就学习一下其中的原理。

关于文件下载存在静态下载和动态下载两种,静态下载是比较容易的,我们平常在网上对很多图片和和视频等的下载有很多其实就是静态下载,那么到底什么是静态下载?静态下载可以理解为对静态资源的下载,静态资源是已经存在于web应用程序的目录或者其子目录中的文件等,不需要通过程序控制进行改变的,可以直接通过浏览器直接进行访问既可以直接下载的,这种可以称之为静态下载;但是并不是左右的资源都是静态资源,有的文件或者图片可能并不保存在应用程序目录下,而可能是在WEB-INF目录中,抑或是在服务器的其他目录中,还可以是在数据库中,另外也可以通过程序控制生成文件,当出现这种情况时就不是静态下载能够解决的了,就要通过编程的手段来发送资源。

一、 静态下载

使用HTML标签<a>来实现静态下载,如下直接请求应用程序目录下的文件:
<body>
	<a href="abc.txt">静态文件下载</a>
</body>
注意如果直接点击的话并不会下载文件而是在浏览器中显示文件的内容,看它的响应头如下:
可以看出content-type是text/plain,这是这个首部决定浏览怎样呈现服务器返回的数据,但是可以通过另存为来完成文件的下载。因为是一个静态文件,我们没办法编程改变它的返回的content-type的值,这些都是servlet容器来决定的,类似如果是png图片则返回的类型是image/png。

二、 动态下载

动态下载就可以通过程序来控制下载的过程以及添加相应的信息。我们首先设置一下JSP文件的下载,因为我们可以通过设置它的content-type来告诉浏览器怎么处理这个数据。

1、 JSP页面下载

要下载的页面如下:
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>JSP File</title>
</head>
<body>
	<%
		response.setContentType("application/x-msdownload");
	%>
	
	Now is <%=new Date(System.currentTimeMillis()) %>
</body>
</html>
还是使用如下HTML标签:
<a href="content.jsp">JSP下载</a>
此时在点击该链接就会弹出save as对话框(在chrome下面测试),但是如果你使用微软的Microsoft Edge浏览器的话则会直接显示该页面内容(Edge另存为也会下载文件)。这里使用的content-type首部的内容是"application/x-msdownload",这是告诉浏览器这是一个要保存到本地的下载的文件,虽然我们告诉了,但是具体浏览器是怎么处理的我们是不知道的,所以对这个首部内容的处理不同的浏览器有不同的处理方式,所以这种办法并不太可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值