文件上传的fakepath问题

fakepath就是现代浏览器为了隐藏了文件实际路径而生成的字符串。接下来就是寻找解决方法找出图片原路径的方法,接下来的代码是网上找到的解决方法:

$("input[type='file']").on('change', function () {
    var oFReader = new FileReader();
    var file = document.getElementById('input-file').files[0];
    oFReader.readAsDataURL(file);
    oFReader.onloadend = function(oFRevent){
        var src = oFRevent.target.result;
        $('.content').attr('src',src);
        alert(src);
    }
});

 

转载于:https://www.cnblogs.com/zplogo/p/10059780.html

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

余额充值