近日,项目中被测出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"是一个功能实现,它允许用户在网页上一次性上传多张图片,并在上传前或上传过程中提供预览功能,同时确保该功能在不同浏览器,如火狐(Firefox)和IE(Internet...
本文将深入探讨如何实现一个兼容火狐(Firefox)和IE(Internet Explorer)浏览器的JS图片预览功能,同时也会涉及到源码分析和相关工具的使用。 一、基本原理 图片预览的核心是利用HTML的`<img>`标签和`window.URL....
对于"兼容IE6、7、8、9、火狐谷歌"的要求,这意味着前端代码需要考虑到不同浏览器之间的差异。由于IE6-9不支持File API,可能需要借助Flash或ActiveX插件来实现图片预览。而对于其他现代浏览器,如火狐、谷歌,可以...
6. **跨浏览器支持**:兼容主流浏览器,如Chrome、Firefox、Safari、Edge和IE9+。 7. **API接口**:提供丰富的API接口,方便开发者进行扩展和定制。 8. **服务器端支持**:支持各种后端平台,如PHP、ASP.NET、Ruby...
下面将详细介绍如何在ASP.NET中实现FileUpload控件上传图片前的预览功能,同时兼容IE6、IE7、IE8以及Firefox等主流浏览器。 1. **HTML结构与JavaScript预览** 在前端页面上,我们需要一个FileUpload控件让用户选择...
为了实现这个功能并且确保兼容性,我们需要处理各种浏览器之间的差异,包括那些较老的版本,如Internet Explorer 6、7和8,以及Firefox等。在这个场景下,我们将深入探讨如何使用JavaScript来实现一个跨浏览器的图片...
可能的原因是Firefox对File API的实现或安全策略与其他浏览器不同,需要特殊处理。 - **其他浏览器**:对于未测试的浏览器,如Chrome、Safari等现代浏览器,通常能较好地支持File API,但还是建议进行实际测试以...
这个功能在IE6/7/8以及Firefox 3.5.5等较旧版本的浏览器中同样能够实现,这在当时是一个技术挑战,因为这些浏览器并不支持HTML5的一些高级特性。 首先,我们需要理解文件API在JavaScript中的作用。在HTML5中,File ...
该组件支持多种浏览器环境,包括IE6+、Firefox、Chrome、Safari等,能够很好地兼容现代和老旧的浏览器。 **1. WebUploader组件特性** - **多文件选择**:WebUploader支持多选文件,用户可以一次性选择多个文件进行...
本项目主要关注的是“js本地图片预览”,并特别强调了对旧版IE(6-8)、Firefox、Chrome 17+、Opera 11+以及Maxthon 3等浏览器的兼容性。 首先,我们需要理解JavaScript(JS)在图片预览中的作用。在HTML5中,`...
这个WebUploader demo实例特别强调了对IE6及以上版本,以及Firefox和Chrome等主流浏览器的支持,确保在不同环境下都能实现稳定、高效的文件上传功能。 WebUploader的核心原理是利用HTML5的File API进行文件读取、...
7. **跨浏览器兼容**:考虑到不同用户的浏览器偏好,组件应该兼容主流的浏览器,如Chrome、Firefox、Safari、IE等。 8. **权限控制**:支持服务器端对上传文件的权限验证,如文件类型、大小的限制,防止恶意文件...
KindEditor的设计理念是简洁高效,它支持多种浏览器环境,包括Chrome、Firefox、Safari、IE等主流浏览器,这使得它在各种环境下都能保持良好的兼容性和稳定性。其轻量级的特性使得加载速度快,对服务器资源的需求...
这款编辑器支持多种浏览器,如IE、Firefox、Chrome和Safari,提供丰富的API供开发者自定义和扩展。 【Ajax File Image Manager】Ajax File Image Manager是一个基于Ajax技术的文件和图像管理组件,用户无需刷新页面...
WebUploader 使用JavaScript编写,兼容主流的浏览器,包括Chrome、Firefox、Safari、IE8+等。 在配置WebUploader时,我们需要了解以下几个关键参数: 1. **swf**: 这是Flash组件的路径,用于在不支持HTML5的浏览器...
在EXTJS中,上传图片并实现预览功能可能会遇到一些挑战,特别是在处理浏览器的兼容性问题时。这里我们将深入探讨如何解决EXTJS上传...通过使用适当的代码和技术,我们可以确保在各种浏览器中都能正确预览上传的图片。
它支持多种现代浏览器,包括Chrome、Firefox、Safari和Opera,对于IE也有一定的兼容性。这个库的主要特性包括: 1. **多文件上传**:FileAPI允许用户一次选择并上传多个文件,这在传统的HTML表单上传中是不支持的。...
WebUploader是一款强大的JavaScript文件上传组件,它专注于解决大文件上传的问题,尤其在处理多文件、断点续传以及预览功能上表现出色。这个组件由阿里云开发,旨在为Web应用提供灵活、高效的文件上传解决方案。 一...
1. **跨浏览器兼容**:`swfupload`利用Flash技术,可以在大部分主流浏览器上运行,包括IE6+、Firefox、Chrome等。 2. **多文件选择**:通过Flash对象,用户可以一次性选择多个文件。 3. **文件预览**:在上传前,...
IE6、7、8在处理文件上传时与其他现代浏览器(如Firefox、Chrome)存在差异,因此需要特殊的处理方式。 1. **JSP基础知识**: JSP(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者将Java代码嵌入...