`
rigger21
  • 浏览: 131609 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

预览上传的本地图片

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

Image Upload Preview

  上传文件是一种很普通的Web应用,尤其以上传图片更为常见。今天我们就在Web标准的范围内谈谈与这个
主题相关的内容(只限前端部分,上传的实现当然就不在此列了),关键词是:Javascript、DOM和Firefox。

表单

  先创建一个file表单域,我们需要用它来浏览本地文件。

<form name="form1" id="form1" method="post" action="upload.php"> <input type="file" name="file1" id="file1" /></form>

  试下效果:

  

判断文件类型

  当用户选择了一个图片文件时,我们希望他能马上看到这张图片的缩略图,以便他能确认没有把自己的光屁
股照片当作头像传到我们的服务器上^_^。

  在预览之前我们还得先判断一下用户选择的是不是一个图像文件,如果他想用一个.rar文件做头像的话我们
也需要礼貌地提醒一下。

<form name="form2" id="form2" method="post" action="upload.php"> <input type="file" name="file2" id="file2" onchange="preview()" /></form>

  Javascript函数实现,注意我们使用DOM方法getElementById来访问对象。不要再使用forminputname属性来访问对象了,只有IE才这么干。

<script type="text/javascript"> function preview2(){  var x = document.getElementById("file2");  if(!x || !x.value) return;  if(x.value.indexOf(".jpg")<0   && x.value.indexOf(".jpeg")<0   && x.value.indexOf(".gif")<0){   alert("您选择的似乎不是图像文件。");  }else{   alert("通过");  } }</script>

  试下效果:

  这里有一个问题,如果用户选择了名为“fake.jpg.txt”的文件,这段脚本仍旧会认为这是一个合法的图像文
件。一个可行的解决方案是先把文件名转换成小写,再取文件路径的最后4到5位,判断一下文件的扩展名是否
确为我们支持的图像文件扩展名。不过这种方案略显笨拙,也没有什么美感可言,我们换一种方案:用“正则
表达式”来判断文件扩展名。

<script type="text/javascript"> function preview3(){  var x = document.getElementById("file3");  if(!x || !x.value) return;  var patn = /\.jpg$|\.jpeg$|\.gif$/i;  if(patn.test(x.value)){   alert("通过");  }else{   alert("您选择的似乎不是图像文件。");  } }</script>

  看看效果(可以自己创建一个“fake.jpg.txt”文件试试):

  如果从来没有接触过正则表达式,那这段脚本对你可能会有些晦涩,不妨Google一把,看看是否可以先学
习学习这方面的知识。我可以向你保证花四五个小时学点正则表达式会是你最近三个月内作出的最明智选择^_^。

  回到这段脚本上来,即使你还看不懂正则表达式那两行,但整段脚本的美感还是很明显的:简洁、直接、
语义流畅,这与Web标准关于XHTML的要求是一致的,与Web设计师或开发者天生的“完美”主义也是一致的。

  jjww一大段之后,我们转入重点——

预览图片

  预览功能的基本设计思路是很清晰的:创建一个img元素,再把文件域的value值赋值给img元素的src
属性。

<form name="form4" id="form4" method="post" action="#">
<input type="file" name="file4" id="file4" onchange="preview4()" />
<img id="pic4" src="" alt="图片在此显示" width="120"/></form>
<script type="text/javascript">
function preview4(){
var x = document.getElementById("file4");
var y = document.getElementById("pic4");
if(!x || !x.value || !y) return;
var patn = /\.jpg$|\.jpeg$|\.gif$/i;
if(patn.test(x.value)){
y.src = "file://localhost/" + x.value;
}else{
alert("您选择的似乎不是图像文件。");
}
}
</script>

  试下效果:

  如果你用的是Firefox(或Opera),可能会发现什么也没有发生。是的,很不幸Firefox的安全策略不允许
我们显示一个用户的本地图像文件。不知道他们为什么要这么做,我个人觉得图像文件并不会造成严重的安全
性问题。即使是不久前比较热门的那个会引起Windows崩溃的jpeg文件,要显示它的前提条件是用户自己选择
了这个文件或者你知道这个文件在用户硬盘上的准确路径。所以我想这种策略很可能来自于一个“懒惰”的开
发人员,他并不想多写一些程序来区分这个本地文件是一个图像文件还是一个恶意文件,Firefox对安全性的要
求让他们有些过于敏感了。

  让Firefox显示本地文件的唯一办法就是修改它的默认安全策略:

  1. 在Firefox的地址栏中输入“about:config
  2. 继续输入“security.checkloaduri
  3. 双击下面列出来的一行文字,把它的值由true改为false

  然后你可以再试试上面预览,everything works well!可惜的是我们并不能要求所有的用户都去修改这个
值(更不用说修改的过程还挺麻烦),所以这对我们来说毫无意义。我们能做的也许就是接受Firefox不能预览
本地图片这种“可笑”的局面。

用DOM来创建对象

  在上面的XHTML代码中,我们为了预览图片,事先加入了一个没有设置srcimg对象。除去不美观、代
码冗余之外,如果用户浏览器不支持Javascript,他不仅无法使用这个功能,还要接受页面上一个永远不会显
示出来的破图。要解决这个问题,我们就需要在“运行时”再生成这个img对象,途径还是DOM。

<form name="form5" id="form5" method="post" action="#">
<input type="file" name="file5" id="file5" onchange="preview5()"/>
</form>
<script type="text/javascript">
function preview5(){
var x = document.getElementById("file5");
if(!x || !x.value) return;
var patn = /\.jpg$|\.jpeg$|\.gif$/i;
if(patn.test(x.value)){
var y = document.getElementById("img5");
if(y){
y.src = 'file://localhost/' + x.value;
}else{
var img=document.createElement('img');
img.setAttribute('src','file://localhost/'+x.value);
img.setAttribute('width','120');
img.setAttribute('height','90');
img.setAttribute('id','img5');
document.getElementById('form5').appendChild(img);
}
}else{
alert("您选择的似乎不是图像文件。");
}
}
</script>

  试下效果:

  这样就相对比较完美了。我也不解释上面这些DOM方法的具体意义,Google一下什么都有了。DOM和正则
表达式一样,都是“包你不悔”的实用技术,如果你希望更多了解、深入学习、或者顺利实践Web标准,DOM
是不可或缺的。从我本人最近的体会来说,Javascript+DOM+CSS蕴藏着强大的能量,就看你怎么释放它了。

分享到:
评论

相关推荐

    图片上传本地预览插件

    在IT领域,图片上传本地预览插件是一个常见的功能组件,尤其在网页应用和桌面软件中,它极大地提升了用户体验。这个插件的核心作用是让用户在实际上传图片到服务器之前,能够在本地环境中预览图片效果,确保图片的...

    jQuery点击头像上传本地预览裁剪图片

    在IT领域,尤其是在Web开发中,用户界面的交互性至关重要,而"jQuery点击头像上传本地预览裁剪图片"就是一个提升用户体验的经典案例。这个功能允许用户在上传头像前预览并裁剪图片,提高了上传过程的可控性和便捷性...

    jquery 本地上传图片预览Demo

    在本文中,我们将深入探讨如何使用jQuery实现本地图片上传预览功能,这是一项常见的Web开发需求,尤其是在构建交互式用户界面时。jQuery是一款强大的JavaScript库,它简化了DOM操作、事件处理、动画制作以及Ajax交互...

    jsp 本地图片上传前的预览

    整个工程"test.jsp"的实现将这些部分结合在一起,为用户提供了一个友好的本地图片上传预览功能。在这个过程中,我们利用了HTML5的特性,如文件API和data URL,以及jQuery的便利性,实现了前后端的协同工作。这个项目...

    js读取本地图片进行预览,上传服务器

    在JavaScript中,本地图片的预览和上传到服务器是一个常见的需求,特别是在Web应用中,比如社交媒体、博客编辑器或者在线图像处理工具。本项目着重于实现这个功能,提供了源码和工具来帮助开发者轻松实现这一过程。...

    详解nodejs实现本地上传图片并预览功能(express4.0+)

    写在前面:计划实现图片上传预览功能,但是本地图片上传所获得路径为 C:\fakepath\”+文件名的形式,得不到文件真实路径,所以无法直接预览,于是采用将图片上传至服务器,传回服务器路径,实现预览。前端采用通过...

    html5图片上传本地生成缩略图预览

    HTML5图片上传与本地生成缩略图预览是现代网页应用中常见的功能,它极大地提升了用户体验,特别是对于涉及图像处理的网站。这个功能利用了HTML5的一些新特性,包括File API、Canvas和Data URL。接下来,我们将深入...

    Jquery 表单验证+本地图片上传-切割-预览

    在本项目中,"Jquery 表单验证+本地图片上传-切割-预览"是一个综合性的前端开发实例,它涵盖了几个重要的JavaScript库和技术,包括jQuery、表单验证、图片上传、图片切割以及预览功能。以下是这些知识点的详细解释:...

    上传图片本地预览效果

    在现代Web应用中,"上传图片本地预览效果"是一个常见的功能,特别是在社交媒体、电子商务、图像编辑等场景中。这个功能允许用户在选择图片后,无需等待上传完成就能在页面上即时预览所选的图片,提升了用户体验。...

    本地图片上传即时预览

    标题中的“本地图片上传即时预览”是一个常见的前端开发功能,尤其在网页表单、社交媒体应用或者在线编辑器中非常普遍。这个功能允许用户在选择本地图片后立即在页面上看到预览效果,无需等待图片实际上传到服务器。...

    html5移动端图片上传本地生成缩略图预览(单图上传)

    综上所述,利用HTML5的File API和Canvas,我们可以在移动端实现图片上传时的本地预览和缩略图生成,提升用户交互体验。在实际项目中,还可以结合其他技术如Promise、async/await等优化代码结构,提高代码可读性和...

    Ueditor可上传本地图片

    在Ueditor中,本地图片上传功能是一项基础且重要的特性,允许用户直接从他们的计算机上传图片到服务器,并在编辑器中插入这些图片。 1. **Ueditor 结构与工作原理** - Ueditor 包含前端编辑器界面和后端服务两部分...

    利用getObjectURL获取图片路径实现本地预览上传图片

    在现代Web开发中,用户...总的来说,通过`URL.createObjectURL()`,我们可以方便地在用户选择图片后实现本地预览,提升上传图片的功能体验。结合其他前端技术,如Ajax异步上传,可以构建出更高效、友好的图片上传系统。

    Jsp中显示本地图片预览

    在JSP(JavaServer Pages)中,显示本地图片预览是一项常见的需求,特别是在网页开发中。JSP是一种基于Java的动态网页技术,它允许开发者在HTML、XML或其他标记语言中嵌入Java代码,以实现服务器端的数据处理和动态...

    图片上传及预览+时间水印

    首先,图片上传是网页或应用程序允许用户将本地图片上传到服务器的过程。这个过程涉及到前端的用户界面设计,以便用户选择文件,以及后端的处理逻辑来接收和存储这些文件。在前端,可以使用HTML5的`...

    上传并预览图片

    1 上传图片前实现本地预览图片。 2 兼容ie,firefox 3 实现判断文件大小。火狐下实现了上传前判断图片大小,ie下目前是采用ActiveXObject方法,但会弹框提示,不友好,提供ajax方式后台判断文件大小。 4 判断图片类型...

    ie8下上传图片无法预览本地图片解决方法技术资料

    ### IE8下上传图片无法预览本地图片解决方法技术资料 #### 背景与问题描述 在Web开发过程中,特别是在处理旧版本浏览器兼容性问题时,经常会遇到各种各样的挑战。Internet Explorer 8(IE8)作为一款较早的浏览器...

    C#图片上传,用于winform,带图片预览

    - 文件流:使用`FileStream`读取本地图片文件,将其转换为`MemoryStream`,然后作为HTTP请求的Body部分。 - 错误处理:应包含错误检查和异常处理机制,例如网络问题、文件不存在或权限不足等情况。 4. **用户体验...

    input file上传图片预览

    在前端开发中,"input file上传图片预览"是一个常见的需求,它允许用户选择本地的图像文件,并在上传前提供预览。这个功能在许多网站和应用中都很实用,例如社交媒体平台、在线编辑器或者个人资料设置等。下面将详细...

    cupload本地图片上传预览插件

    【cupload本地图片上传预览插件】是一个专为前端开发者设计的实用工具,它使得在网页中实现本地图片的上传和预览功能变得更加简单。这个插件是前端开发中的重要组成部分,尤其对于那些需要用户交互式上传图片的网站...

Global site tag (gtag.js) - Google Analytics