php fakepath,在文件上载中获取真实路径而不是“fakepath”

此博客分享了如何使用JavaScript和PHP修改文件上传功能,焦点在于从完整路径中仅显示文件名,提升用户体验。作者展示了旧有和改进后的代码片段,目标是通过`phpmail()`发送邮件时只显示用户实际上传的文件名:coverpage.pdf。
摘要由CSDN通过智能技术生成

因为我的目标是让最终用户看到上传的文件名,然后通过php mail()函数发送,所以我所做的就是:

在JS文件中

旧功能:

var fileuploadinit = function(){

$('#career_resume').change(function(){

var pathwithfilename = $('#career_resume').val();

$('.uploadedfile').html("Uploaded File Name :" + pathwithfilename).css({

'display':'block'

});

});

};

校正功能:

var fileuploadinit = function(){

$('#career_resume').change(function(){

var pathwithfilename = $('#career_resume').val();

var filename = pathwithfilename.substring(12);

$('.uploadedfile').html("Uploaded File Name :" + filename).css({

'display':'block'

});

});

};

$(document).ready(function () {

fileuploadinit();

});

旧结果:

上传文件名:c:\fakepath\coverpage.pdf

新结果:

上传文件名:coverpage.pdf

希望有帮助:)

  • 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、付费专栏及课程。

余额充值