`

IE8、firefox解决file组件上传照片的预览

阅读更多
    近日,项目中被测出bug,说google,ie8,firefox上传照片前,不能正常预览照片。 于是,想啊,找啊,得出一些信息,整理归纳如下:

    随着各浏览器版本的升级,对用户安全性要求,新的高版本浏览器都阻止读取客户本地路径。据说黑客会通过FireFox的这一安全隐患向服务器上传文件。
1、现况:解决了ie系列、firefox3浏览器的预览问题,
         Safari,google,Opera,暂时还没好的解决办法。
2.核心代码(原理参考:http://chenhua-1984.iteye.com/blog/405262):
js部分:
------------------------
$("#uploadFile").change(function(){
var path = $(this).val();
var bgpath = '/jyimges/glzx/bgphoto.jpg';
if ($.trim(path).length <= 0) {
path = bgpath;
}else if(!checkPath(path)){
path = bgpath;
alert("您选择的上传文件格式不符合要求!<br/>请选择JPG、BMP或PNG格式的文件!",'','400px')
}

if($('#previewDiv')[0].filters) {
try{
$('#previewDiv').html('')[0].filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = path;
}catch(e){
$('#uploadText').css('color','#666').html('');
try{
$('#previewDiv')[0].filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = bgpath;
}catch(e1){}
}
}else{
if ($.browser.mozilla){
path= this.files[0].getAsDataURL(); //这是重点。此值是firefox过加密的,也只有由它可以解析
$('#previewDiv').html('<img src="'+path+'" width="100%"  height="100%"/>');
}else{
//随着浏览器对安全性要求的提高,暂对其他浏览器,无法处理。
}
}
});

html部分:
-------------------------
<input id="uploadFile" name="uploadFile" type="file" size="25"/>
<div class="userpicBox" id="previewDiv" tyle="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);"></div>


3、firefox获取上传图片本地全路径。(项目暂时没这个,就用了上面说的.getAsDataURL(),放在这儿,作个参考)

   //简单方法
   function readFileFirefox(fileBrowser) {  
       try {           
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");  
       } catch (e) {
return;     
       }
       var fileName=fileBrowser.value;  
     return fileName;
    }


//完整方法
function readFileFirefox(fileBrowser) {  
   try {  
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");  
    } catch (e) {
//在firefox地址栏输入:about:config, 再打开页面(过滤器)中,添加:signed.applets.codebase_principal_support  。
        alert('Unable to access local files due to browser security settings. To overcome this, follow these steps: (1) Enter "about:config" in the URL field; (2) Right click and select New->Boolean; (3) Enter "signed.applets.codebase_principal_support" (without the quotes) as a new preference name; (4) Click OK and try loading the file again.');  
        return;  
    }  
 
    var fileName=fileBrowser.value;  
    var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);  
    try {  
        // Back slashes for windows  
        file.initWithPath( fileName.replace(/\//g, "\\\\") );  
    } catch(e) {  
        if (e.result!=Components.results.NS_ERROR_FILE_UNRECOGNIZED_PATH) throw e;  
        alert("File '" + fileName + "' cannot be loaded: relative paths are not allowed. Please provide an absolute path to this file.");  
        return;  
    }  
 
    if ( file.exists() == false ) {  
        alert("File '" + fileName + "' not found.");  
        return;  
    } 
    
   alert(file.path); // I test to get the local file's path.  
    var is = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance( Components.interfaces.nsIFileInputStream );  
    try {
    is.init( file,0x01, 00004, null);
    } catch (e) {  
        if (e.result!=Components.results.NS_ERROR_FILE_ACCESS_DENIED) throw e;  
        alert("Unable to access local file '" + fileName + "' because of file permissions. Make sure the file and/or parent directories are readable.");  
        return;  
    }  
    var sis = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance( Components.interfaces.nsIScriptableInputStream );  
    sis.init( is );  
    var data = sis.read( sis.available() );  
    alert("Data from file: " + data); // I test to get the local file's data.  
}

4、个人觉得最通用办法,是用ajax上传图片来预览。只是成本比较高,用户预览了照片,可能会选择放弃上传。这样,就还需要去删除之前的照片。成本太高,除非真的很变态,必需要预览。呵。


2011-2-24总结
分享到:
评论

相关推荐

    asp.net 多图片上传 可预览 兼容火狐 IE

    在本场景中,"ASP.NET 多图片上传 可预览 兼容火狐 IE"是一个功能实现,它允许用户在网页上一次性上传多张图片,并在上传前或上传过程中提供预览功能,同时确保该功能在不同浏览器,如火狐(Firefox)和IE(Internet...

    js图片预览(支持火狐和IE)

    本文将深入探讨如何实现一个兼容火狐(Firefox)和IE(Internet Explorer)浏览器的JS图片预览功能,同时也会涉及到源码分析和相关工具的使用。 一、基本原理 图片预览的核心是利用HTML的`&lt;img&gt;`标签和`window.URL....

    图片上传预览剪切

    对于"兼容IE6、7、8、9、火狐谷歌"的要求,这意味着前端代码需要考虑到不同浏览器之间的差异。由于IE6-9不支持File API,可能需要借助Flash或ActiveX插件来实现图片预览。而对于其他现代浏览器,如火狐、谷歌,可以...

    jQuery File Upload 基于Jquery的图片上传组件.zip

    6. **跨浏览器支持**:兼容主流浏览器,如Chrome、Firefox、Safari、Edge和IE9+。 7. **API接口**:提供丰富的API接口,方便开发者进行扩展和定制。 8. **服务器端支持**:支持各种后端平台,如PHP、ASP.NET、Ruby...

    fileupload上传图片前预览

    下面将详细介绍如何在ASP.NET中实现FileUpload控件上传图片前的预览功能,同时兼容IE6、IE7、IE8以及Firefox等主流浏览器。 1. **HTML结构与JavaScript预览** 在前端页面上,我们需要一个FileUpload控件让用户选择...

    js预览图片兼容所有浏览器

    为了实现这个功能并且确保兼容性,我们需要处理各种浏览器之间的差异,包括那些较老的版本,如Internet Explorer 6、7和8,以及Firefox等。在这个场景下,我们将深入探讨如何使用JavaScript来实现一个跨浏览器的图片...

    上传图片不保存直接预览

    可能的原因是Firefox对File API的实现或安全策略与其他浏览器不同,需要特殊处理。 - **其他浏览器**:对于未测试的浏览器,如Chrome、Safari等现代浏览器,通常能较好地支持File API,但还是建议进行实际测试以...

    javascript 上传图片预览效果

    这个功能在IE6/7/8以及Firefox 3.5.5等较旧版本的浏览器中同样能够实现,这在当时是一个技术挑战,因为这些浏览器并不支持HTML5的一些高级特性。 首先,我们需要理解文件API在JavaScript中的作用。在HTML5中,File ...

    百度多文件上传组件webuploader示例for java

    该组件支持多种浏览器环境,包括IE6+、Firefox、Chrome、Safari等,能够很好地兼容现代和老旧的浏览器。 **1. WebUploader组件特性** - **多文件选择**:WebUploader支持多选文件,用户可以一次性选择多个文件进行...

    图片上传预览

    本项目主要关注的是“js本地图片预览”,并特别强调了对旧版IE(6-8)、Firefox、Chrome 17+、Opera 11+以及Maxthon 3等浏览器的兼容性。 首先,我们需要理解JavaScript(JS)在图片预览中的作用。在HTML5中,`...

    百度多文件上传webuploaddemo例子支持ie6以上、火狐、谷歌

    这个WebUploader demo实例特别强调了对IE6及以上版本,以及Firefox和Chrome等主流浏览器的支持,确保在不同环境下都能实现稳定、高效的文件上传功能。 WebUploader的核心原理是利用HTML5的File API进行文件读取、...

    通用多文件上传组件 v1.1 gb2312版源码

    7. **跨浏览器兼容**:考虑到不同用户的浏览器偏好,组件应该兼容主流的浏览器,如Chrome、Firefox、Safari、IE等。 8. **权限控制**:支持服务器端对上传文件的权限验证,如文件类型、大小的限制,防止恶意文件...

    filemanager-0.0.2.zip

    KindEditor的设计理念是简洁高效,它支持多种浏览器环境,包括Chrome、Firefox、Safari、IE等主流浏览器,这使得它在各种环境下都能保持良好的兼容性和稳定性。其轻量级的特性使得加载速度快,对服务器资源的需求...

    fckeditor_with_Ajax File_Image_Manager

    这款编辑器支持多种浏览器,如IE、Firefox、Chrome和Safari,提供丰富的API供开发者自定义和扩展。 【Ajax File Image Manager】Ajax File Image Manager是一个基于Ajax技术的文件和图像管理组件,用户无需刷新页面...

    文件上传控件 webuploader

    WebUploader 使用JavaScript编写,兼容主流的浏览器,包括Chrome、Firefox、Safari、IE8+等。 在配置WebUploader时,我们需要了解以下几个关键参数: 1. **swf**: 这是Flash组件的路径,用于在不支持HTML5的浏览器...

    解决Extjs上传图片无法预览的解决方法

    在EXTJS中,上传图片并实现预览功能可能会遇到一些挑战,特别是在处理浏览器的兼容性问题时。这里我们将深入探讨如何解决EXTJS上传...通过使用适当的代码和技术,我们可以确保在各种浏览器中都能正确预览上传的图片。

    Node.js-FileAPI—一组javascript处理文件的工具

    它支持多种现代浏览器,包括Chrome、Firefox、Safari和Opera,对于IE也有一定的兼容性。这个库的主要特性包括: 1. **多文件上传**:FileAPI允许用户一次选择并上传多个文件,这在传统的HTML表单上传中是不支持的。...

    WebUploader大文件上传

    WebUploader是一款强大的JavaScript文件上传组件,它专注于解决大文件上传的问题,尤其在处理多文件、断点续传以及预览功能上表现出色。这个组件由阿里云开发,旨在为Web应用提供灵活、高效的文件上传解决方案。 一...

    多图上传(多文件上传)

    1. **跨浏览器兼容**:`swfupload`利用Flash技术,可以在大部分主流浏览器上运行,包括IE6+、Firefox、Chrome等。 2. **多文件选择**:通过Flash对象,用户可以一次性选择多个文件。 3. **文件预览**:在上传前,...

    jsp 文件上传浏览,支持ie6,ie7,ie8

    IE6、7、8在处理文件上传时与其他现代浏览器(如Firefox、Chrome)存在差异,因此需要特殊的处理方式。 1. **JSP基础知识**: JSP(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者将Java代码嵌入...

Global site tag (gtag.js) - Google Analytics