`

input类型为file时,博客园,chrome,FF和IE8的fakepath问题处理方法

阅读更多
在处理表单的时候,如果input类型为file时,FF,chrome,IE8获取文件时获取到一个fakepath,而不是真正的文件地址;不过ie6,ie7却可以获取,在IE8之后,安全级别提高了。但是,当出现一个客户端图片预览这样的需求的时候,对于不同浏览器就要采用不用的策略了;IE可以使用滤镜,chrome等可以使用HTML5的方式,ie8 input,具体如下:
<img id="file_img"  src="http://www.09687.com/tourl/op/xx" width="100" height="100"/>
<script type="text/javascript">
var getPath=function(obj){
obj.select();
            var path=document.selection.createRange().text;
obj.removeAttribute("src");
obj.style.filter=  
            "alpha(opacity=0);progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+path+"', sizingMethod='scale');"; 
}
</script>
这样,通过滤镜的方式获得path,fakepath,不过,使用滤镜时,图片的左上角会出现一个小图标,这时,我们可以绕弯的用一个透明图片作为file_img的src,占用这个src,ie8 input,使得小图片被显示为透明;
对于FF,网上有一种流传很久的使用getAsDataURL方法来获取的方法,fakepath,比如:
function getFullPath(obj){
    if(obj){
        if (window.navigator.userAgent.indexOf("MSIE")>=1){
            obj.select();
            return document.selection.createRange().text;
        }
        else if(window.navigator.userAgent.indexOf("Firefox")>=1){
            if(obj.files){
return obj.files.item(0).getAsDataURL();
}
            return obj.value;
        }
return obj.value;
    }
}
不过,我们可以使用html5的方法来兼容FF,HTML5 File API中定义了一个BlobReader,通过它可以使用各种不同的方式读入文件并且可以监听和处理读取文件过程中的各个状态。不过在Firefox与Chrome的实现中,并没有这样一个BlobReader,取而代之的是FileReader,拥有与BlobReader相同的方法和事件。
比如:
function getPath(obj,fileQuery){
var file =fileQuery.files[0]; 
var reader = new FileReader(); 
reader.onload = function(e){
obj.setAttribute("src",e.target.result)
}
reader.readAsDataURL(file); 
}
chrome的解决办法也和FF的一样,使用FileReader对象来实现,fakepath,接下来,我们需要一个完全兼容的版本;
/*fileQuery是指input type为file的对象,在事件中使用this来替代,fakepath,
比如:obj.onChange=function(){
var file_img=document.getElementById("img");
getPath(file_img,this,transImg);
}
transImg是解决IE左上角图标的那张透明图片的路径;*/
var getPath=function(obj,fileQuery,transImg){
if(window.navigator.userAgent.indexOf("MSIE")>=1){
obj.select();
var path=document.selection.createRange().text;
obj.removeAttribute("src");
obj.setAttribute("src",transImg);
obj.style.filter=  
"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+path+"', sizingMethod='scale');"; 
}
else{
var file =fileQuery.files[0]; 
var reader = new FileReader(); 
reader.onload = function(e){
obj.setAttribute("src",e.target.result)
}
reader.readAsDataURL(file); 
}
}
当然,也许我们始终觉得用JS的方法会很烦躁,fakepath,那么可以使用以下2种作为替代方案 1,falsh方法,采用falsh方法也比较妥当,ie8 input,没有兼容的纷扰;2,先进服务器,然后再从服务器读取出来;

转载,原文地址:http://www.09687.com/news/iuuq%25%2F%2Fbsdijwf_docmpht_dpn%2Fb%2F3271969%2F.html
分享到:
评论

相关推荐

    博客园客户端

    此外,为了提高用户体验,博客园客户端可能还包括了其他一些关键特性,比如适应不同屏幕尺寸的响应式布局、网络状态检测与重试机制、异步任务处理以避免阻塞UI线程、以及友好的错误提示和处理机制。 总的来说,...

    博客园的一些文章(算法)

    【算法】是计算机科学的核心组成部分,它涉及到一系列用于解决特定问题的方法和步骤。在编程领域,熟练掌握各种算法能够帮助开发者更高效地处理数据、优化程序性能并解决复杂的问题。【博客园】是一个聚集了众多IT...

    博客园博客PDF生成器

    博客园博客PDF生成器是一款专为博客园用户设计的实用工具,它允许用户将自己在博客园上发表的文章集合导出为PDF格式的文档,方便离线阅读、备份或者分享。这款工具通常适用于那些希望保存自己的博客内容或者需要将一...

    博客园导航

    在本案例中,我们探讨的是如何使用jQuery和CSS这两种技术来创建一个高效、实用的博客园导航菜单。 首先,jQuery是一个强大的JavaScript库,它简化了JavaScript的DOM操作、事件处理、动画效果以及Ajax交互。在构建...

    博客园客户端android源码

    图片加载是移动应用常见的需求,如使用Glide或Picasso库,它们能高效地加载、缓存和处理图片。 9. **权限管理** 如果应用需要访问用户的位置、存储等敏感信息,需要在AndroidManifest.xml中声明权限,并使用...

    博客园openlivewriter

    总之,Open Live Writer是一款专为博客作者设计的专业工具,它的易用性、功能性和跨平台特性使其成为博客园(CNblogs)等博客平台用户的理想选择。无论你是新手还是经验丰富的博主,都能从中找到提高写作效率和提升...

    博客园博文提取器

    程序通过分析博客园博 客源码来生成一些必要的数据,可能在以后使用当中出现爬取不了的情况,可能是博客园的源码 结构修改了。程序只是用于学习之用,严禁用于非法目的而照成博客园服务器过载。 由于生成PDF的时候...

    Android博客园客户端源码

    开发者可以从中学习如何有效地捕获和处理异常,以及如何通过Logcat记录和分析运行时信息。 总之,【Android博客园客户端源码】提供了丰富的学习资源,涵盖了Android应用开发的多个核心领域,包括架构设计、代码组织...

    知乎日报风格的博客园

    1. `MainActivity.java`: 应用的主入口点,负责初始化界面和处理用户交互。 2. `Adapter`类:用于填充列表视图,展示博客园或知乎的条目。 3. `RecyclerView`:可能用于实现可滚动的条目列表,提供了更高效的内存...

    博客园C#文章精华

    - **转换注意事项**:讨论在类型转换过程中可能遇到的问题和潜在的陷阱。 2. **C#扩展方法** - **定义**:介绍什么是扩展方法,以及它如何使代码更加简洁。 - **使用场景**:列举几种常见的使用扩展方法来增强...

    博客园镜像镜像nuget.txt

    这种方式使得开发者在下载和使用这些包时,可以通过博客园服务器来获取,从而提高下载速度并减轻官方服务器的压力。 - **目的**:博客园镜像的主要目的是为中国大陆地区的.NET开发者提供更快更稳定的NuGet包下载服务...

    博客园文章爬取代码

    博客园文章爬取代码是一个基于Java的项目,用于自动化地从博客园网站抓取特定博主的文章并将其保存为Word文档。这个项目对于那些对网络爬虫技术感兴趣的开发者来说,是一个很好的学习和实践案例。以下是对这个项目的...

    博客园安卓版客户端android源码完整版

    【标题】:“博客园安卓版客户端android源码完整版”是指提供了一个用于开发和学习的博客园移动应用的Android源代码。...而对于有经验的开发者,这个源码也可以作为参考,借鉴其中的设计思想和解决特定问题的方法。

    k8s(kubernetes)常见故障处理总结-详细笔记文档总结

    因此,本文总结了 k8s 中常见的故障处理方法,以便快速诊断和解决问题。 一、k8s 之连接异常(集群故障) 在 k8s 集群中,pod 是最小的调度单元,每个 pod 代表集群上正在运行的一个进程。pod 中可以封装一个或多...

    博客园的源码

    博客园是一个知名的中文技术社区,它提供了众多程序员分享技术文章、讨论问题的平台。因此,源码分析将为我们揭示如何构建这样一个高流量、高互动性的在线社区。 在描述中提到,源码可以直接运行,这意味着我们可以...

    Android代码-博客园安卓版

    这个项目的主要目标是为用户提供一个便捷的移动平台,以便他们能够在手机或平板设备上浏览、阅读和互动博客园上的文章和讨论。下面将详细探讨该项目中的关键知识点。 1. **Android SDK与开发环境**: - ...

    Beautifycnblogs博客园样式美化

    博客园作为一个广受欢迎的中文博客平台,为众多技术爱好者提供了分享知识的空间。"Beautifycnblogs博客园样式美化"项目旨在帮助用户提升其博客在博客园上的视觉效果,通过自定义CSS样式,使得博客更加个性化和专业。...

    仿博客园wordpress主题

    “仿博客园wordpress主题”是一款专为WordPress平台设计的中文三栏式博客模板,旨在模仿国内知名技术社区——博客园的界面风格,提供用户熟悉的浏览体验。这款主题以其简洁、清晰的布局,以及对中文内容的良好支持,...

Global site tag (gtag.js) - Google Analytics