您现在的位置是:首页 >其他 >php/js 直接下载远程文件 到客户端网站首页其他

php/js 直接下载远程文件 到客户端

两个人的幸福online 2024-06-17 10:15:03
简介php/js 直接下载远程文件 到客户端

先做个记录,回头完善一下

php 版


	// 远程文件链接
		$url = 'http://static.kanfangjilu.com/5b7fe45205691500062a1c59/3315E3869EFD673014AAB086D9C2CD9B?x-oss-process=image/format,jpg';
		// 远程文件链接
;
		// 设置浏览器下载的文件名,这里还以原文件名一样
		$filename = basename($url);
		// 获取远程文件大小
		// 注意filesize()无法获取远程文件大小
		$headers = get_headers($url, 1);
		$fileSize = $headers['Content-Length'];
		// 设置header头
		// 因为不知道文件是什么类型的,告诉浏览器输出的是字节流
		header('Content-Type: application/octet-stream');
		// 告诉浏览器返回的文件大小类型是字节
		header('Accept-Ranges:bytes');
		// 告诉浏览器返回的文件大小
		header('Content-Length: ' . $fileSize);
		// 告诉浏览器文件作为附件处理并且设定最终下载完成的文件名称
		header('Content-Disposition: attachment; filename="' . $filename . '"');
		
		readfile($url);
		exit;

js版

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<a onclick="downLoadByUrl('http://static.kanfangjilu.com/5b7fe45205691500062a1c59/3315E3869EFD673014AAB086D9C2CD9B?x-oss-process=image/format,jpg')">下载</a>
		<script>
		    function downLoadByUrl(url){
		        var xhr = new XMLHttpRequest();
		        //GET请求,请求路径url,async(是否异步)
		        xhr.open('GET', url, true);
		        //设置请求头参数的方式,如果没有可忽略此行代码
		        // xhr.setRequestHeader("token", token);
		        //设置响应类型为 blob
		        xhr.responseType = 'blob';
		        //关键部分
		        xhr.onload = function (e) {
		            //如果请求执行成功
		            if (this.status == 200) {
		                var blob = this.response;
		                var filename = "11.jpg";//如123.xls
		                var a = document.createElement('a');
		                //创键临时url对象
		                var url = URL.createObjectURL(blob);
		 
		                a.href = url;
		                a.download=filename;
		                a.click();
		                //释放之前创建的URL对象
		                window.URL.revokeObjectURL(url);
		            }
		        };
		        //发送请求
		        xhr.send();
		    }
		</script>
	</body>
</html>

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。