下载文件并不暴露文件路径

1、HTML页面

<button type="button" class="mbDownload">下载模板</button>
<script type="text/javascript">
	//下载模板
	$('.mbDownload').click(function(){
		$.post(
			"{:U('Index/mbDownload')}",
			function(res){
				var form = document.createElement('form');
				form.setAttribute('style','display:none');
				form.setAttribute('target','');
				form.setAttribute('method','post');
				form.setAttribute('action',res);
				
				var input = document.createElement('input');
				input.setAttribute('type','hidden');
				input.setAttribute('name','exportPostTime');
				input.setAttribute('value','');
				document.body.appendChild(form);
				form.appendChild(input);
				form.submit();
			}
		)
	})
</script>

2、PHP文件

/* 
 * 模板下载
 */
public function mbDownload(){
	$url = "http";
	if($_SERVER['HTTPS']=='on') $url .= "s";
	$url .= "://".$_SERVER['SERVER_NAME'];
	
	echo $url.'/Public/模板表格.xlsx';
	exit();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在HTML中,`<input type="file">`元素允许用户上传文件,当用户选择文件后,在文件路径的位置显示的是"fakepath",并非文件的真实路径。这是因为浏览器考虑到安全风险,不希望将用户的本地文件路径暴露给第三方网站。 如果需要获取文件的真实路径,可以使用File API提供的File对象。 1.获取文件对象 通过file元素的`files`属性获取选中的文件列表,如果只选一个文件,则该列表中只包含一个File对象。 ``` var fileObj = document.getElementById("file").files[0]; ``` 2.获取文件真实路径 File API的File对象提供了`fullPath`属性,可以获取文件的真实路径。但是,不是所有浏览器都支持该属性,所以,在获取之前,需要判断浏览器是否支持`fullPath`属性。 ``` if (window.FileReader) { var fullPath = fileObj.fullPath; } else { // 浏览器不支持fullPath属性 } ``` 总结 要获取文件的真实路径,需要使用File API提供的File对象,并判断浏览器是否支持`fullPath`属性。需要注意的是,获取文件的真实路径可能会存在多个安全问题,因此在实际开发中,应该谨慎使用。 ### 回答2: JS获取文件真实路径fakepath的问题,其实是由于浏览器的安全性问题所导致的。为了确保用户的文件不被恶意的脚本访问和篡改,浏览器对于文件路径进行了保护,使得在JS中只能获取到文件名和扩展名,而无法获取到完整路径。 然而,有时候我们在做一些特定的Web开发任务时,确实需要获取到完整路径。比如说,我们需要在上传文件后,将文件路径存储到数据库中,或者其他一些需要使用完整文件路径的操作。 解决这个问题其实有两种方案: 1.使用HTML5的File API HTML5的File API提供了获取文件信息的新方法,其中包括可以获取文件完整路径的功能。这个方法是HTML5的标准方法,支持大部分现代浏览器。使用这个方法,我们可以通过以下方式获取完整文件路径: ``` function handleFileSelect(evt) { var files = evt.target.files; // FileList object var file = files[0]; console.log(file.path); //打印完整路径 } ``` 注意,这种方法需要用户手动选择文件,因此不适用于自动上传文件的场景。 2.使用其它浏览器插件 如果我们需要获取文件的完整路径,而且不能依赖用户自行选择文件,那么我们可以考虑使用其它浏览器插件,比如Flash、Java或ActiveX。这些插件可以提供额外的权限,允许我们通过JS获取文件的完整路径。 不过这种方法存在一定的风险,因为插件需要用户主动安装并授权访问,如果用户对插件的来源和权限不信任,可能会拒绝授权或者删除插件,导致我们的功能无法正常使用。 总之,在实际开发中,我们需要根据具体场景选择合适的方法,并且考虑到用户的安全和使用体验。 ### 回答3: 在前端页面中,我们经常需要通过表单上传文件,并且在提交之前需要获取文件的真实路径。但是,我们会发现当我们使用input[type=file]的时候,获取到的文件路径并不是完整的路径,而是被修改成了一个叫做fakepath的路径,导致我们无法正确地获取到文件的真实路径。 为什么会出现fakepath呢?这是因为浏览器的安全策略,为了保护用户的隐私信息,浏览器会将文件的真实路径从C:\fakepath\开始替换成fakepath。 那么如何获取到文件的真实路径呢?我们可以通过文件对象的name属性获取到文件名,然后通过URL.createObjectURL()方法生成一个临时的URL,最后再通过XMLHttpRequest对象发送请求,来获取到文件的真实路径。 下面是一段简单的代码示例: ```javascript var input = document.getElementById('fileInput'); var file = input.files[0]; var fileName = file.name; var url = URL.createObjectURL(file); var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.onload = function() { var reader = new FileReader(); reader.readAsDataURL(xhr.response); reader.onload = function(e) { window.location = e.target.result; }; }; xhr.send(); ``` 上述代码中,我们首先获取到input元素,然后获取到文件对象,进而获取到文件名和临时URL。接下来,我们创建一个XMLHttpRequest对象,并通过open()方法指定发送请求的方式和路径,并设置responseType为blob。随后,我们利用FileReader对象读取响应的数据,使用window.location跳转到真实路径。 总体来说,获取文件真实路径并不是一件非常容易的事情,需要结合浏览器的安全策略和一些API才可以完成。但是只要我们认真学习,掌握好相关知识,就可以轻松完成这项任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值