javascript 实现图片预览(未上传到服务器端)
1,图片预览
越来越多的浏览器为了安全,都不能获得文件的,全路径,实现图片预览实现起来有点麻烦。有人选择复制图片到服务器的某个路径下,然后从服务器端找到路径,实现预览。但这不是最佳实现方案,如果用户一张一张的预览图片,最终服务器里的垃圾图片岂不泛滥了?
2,代码(以下代码兼容主流浏览器,请放心使用)
<!DOCTYPE html>
<html>
<head>
<title>图片预览</title> <meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
#main {
width: 900px;
height: 600px;
margin: 10px auto 0;
} #preview_text {
width: 900px;
height: 40px;
} #preview_wrapper{
width: 900px;
height: 500px;
border: 1px solid gray;
}
</style>
<script type="text/javascript">
var DIV_ID = "preview";// div
var PREVIEW_ID = "preview_wrapper"; var PIC_WIDTH = 900;// 展示图片的宽度
var PIC_HEIGHT = 500;// 展示图片的高度
var FILE_NAME = "fileName";
var IMAGE_FILE = "imageFile"; function $$(id){// 为了方便起见,统一定义一个函数
return document.getElementById(id);
} function toShowPic(){
doPreview();
setImageName();
} // 设置图片名称
function setImageName(){
var name = $$(IMAGE_FILE).value;
$$(FILE_NAME).value = name.substring(name.lastIndexOf('\\')+1,name.lastIndexOf("."));
} // 预览
function doPreview(){
var sender = $$(IMAGE_FILE);
var allowExtention = ".jpg,.bmp,.gif,.png";// 图片支持的格式
var extention = sender.value.substring(sender.value.lastIndexOf(".") + 1).toLowerCase();// 文件的扩展名
var browserVersion = window.navigator.userAgent.toUpperCase();// 浏览器版本 if(allowExtention.indexOf(extention)!=-1){// 包含指定的几种文件类型
if (browserVersion.indexOf("MSIE") > -1) {// IE 浏览器
if (browserVersion.indexOf("MSIE 6.0") > -1) {// ie6
$$(DIV_ID).setAttribute("src",sender.value);
} else {// ie[7-8]、ie9
sender.select();
var newPreview = $$(PREVIEW_ID+ "New");
if (newPreview == null) {
newPreview = document.createElement("div");
newPreview.setAttribute("id", PREVIEW_ID + "New");
newPreview.style.width = PIC_WIDTH;
newPreview.style.height = PIC_HEIGHT;
newPreview.style.border = "solid 1px gray";
}
newPreview.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='"+ document.selection.createRange().text + "')";
var tempDivPreview = $$(PREVIEW_ID); tempDivPreview.parentNode.insertBefore(newPreview,tempDivPreview);
tempDivPreview.style.display = "none";
}
}else if (browserVersion.indexOf("FIREFOX") > -1) {// 火狐浏览器
var firefoxVersion = parseFloat(browserVersion.toLowerCase().match(/firefox\/([\d.]+)/)[1]); if (firefoxVersion < 7) {// firefox7以下版本
$$(PREVIEW_ID).setAttribute("src",sender.files[0].getAsDataURL());
} else {//firefox7.0+
$$(DIV_ID).setAttribute("src",window.URL.createObjectURL(sender.files[0]));
}
}else if (sender.files) {
//兼容chrome、火狐等,HTML5获取路径
if (typeof FileReader != "undefined") {
var reader = new FileReader(); reader.onload = function(e) {
$$(DIV_ID).setAttribute("src", e.target.result);
$$(DIV_ID).setAttribute("width", PIC_WIDTH);
$$(DIV_ID).setAttribute("height", PIC_HEIGHT);
};
reader.readAsDataURL(sender.files[0]);
} else if (browserVersion.indexOf("SAFARI") > -1) {
alert("暂时不支持Safari浏览器!");
}
}else {
$$(PREVIEW_ID).setAttribute("src",sender.value);
}
}else{
sender.value = ""; // 清空选中文件
$$(FILE_NAME).value="";
alert("仅支持以"+allowExtention+"为后缀的文件!");
if (browserVersion.indexOf("MSIE") > -1) {// IE浏览器
sender.select();
document.selection.clear();
}
sender.outerHTML = sender.outerHTML;
}
} </script> </head> <body>
<div id="main"> <div id="preview_text" class="preview_text">
选择文件 : <input type="file" name="imageFile" id="imageFile" onChange="toShowPic()"/>
文件名 : <input type="text" name="fileName" id="fileName" value=""/>
</div> <div id="preview_wrapper">
<img id="preview" src="image/blank.gif" /><br/><!-- 图片占位符 -->
</div>
</div>
</body>
</html>
3,示例图
javascript 实现图片预览(未上传到服务器端)的更多相关文章
- 基于“formData批量上传的多种实现” 的多图片预览、上传的多种实现
前言 图片上传是web项目常见的需求,我基于之前的博客的代码(请戳:formData批量上传的多种实现)里的第三种方法实现多图片的预览.上传,并且支持三种方式添加图片到上传列表:选择图片.复制粘贴图片 ...
- 原生js实现图片预览并上传
最近主导的PC客户端网站重构工程告一段落,下一阶段开始给公司APP开发H5页面,技术栈是react.最近碰到一个需求:需要在H5页面上添加身份证照片,预览并上传.因为要兼容安卓4.4以下版本的手机,所 ...
- H5-FileReader实现图片预览&Ajax上传文件
图片预览 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- 前端图片预览,上传前预览,兼容IE7、8、9、10、11,Firefox,Chrome(学习到的知识)
文章地址:http://www.cnblogs.com/rubylouvre/p/4597344.html 一.window.URL 在Chrome中,window.URL和window.webkit ...
- jquery+html5+canvas实现图片 预览 压缩 上传
javascirpt (function($){ $.fn.extend({ aiiUpload:function(obj) { if(typeof obj !="object") ...
- vue组件利用formdata图片预览以及上传《转载》
转载修改 在项目中直接新建一个单文件页,复制一下代码即可 upload组件: <template> <div class="vue-uploader" ...
- vue组件利用formdata图片预览以及上传
转载修改 在项目中直接新建一个单文件页,复制一下代码即可 upload组件: <template> <div class="vue-uploader" ...
- 用js实现预览待上传的本地图片
js实现预览待上传的本地图片,代码如下: <form name="form5" id="form5" method="post" ac ...
- 如何预览将要上传的图片-使用H5的FileAPI
这篇将要说的东西已经不新鲜了. 参考资料: Reading files in JavaScript using the File APIs (鉴于作者在美国, 我姑且认为作者母语是英语, 当然链接中有 ...
随机推荐
- ecshop的smarty库还原成smarty原生库方法
写过ecshop模板的人都晓得,他们是用所谓的dwt的文件来嵌套lbi文件进行模板的彼此调用.在咱们调取数据的时分,ecshop的默许模板只提供给咱们几个简略的句子进行调用,那么有没有办法能够把这个精 ...
- 预览Cube出现没有注册类错误
用Microsoft SQL Server Management Studio预览AS上的Cube 出现如下错误. TITLE: Microsoft SQL Server Management Stu ...
- 如何知道PostgreSQL数据库下每个数据库所对应的目录
base目录,这是所有数据库目录的父目录. 在base目录下第一层,每个目录就是一个数据库所对应的文件. 那么如何知道哪个目录对应哪个数据呢? 查询如下:先看数据库列表 [pgsql@localhos ...
- 什么是比特币(bitcoin)
一.什么是比特币? 比特币是一种由开源的P2P软件产生的电子货币,是一种网络虚拟货币.比特币使用遍布整个P2P网络节点的分布式数据库来记录货币的交易,并使用密码学的设计来确保货币流通各个环节安全性.比 ...
- Java中Queue类实现
原先在java编程中,Queue的实现都是用LinkedList Queue queue = new LinkedList(); 但正如jdk中所说的那样: 注意,此实现不是同步的.如果多个线程同时访 ...
- MHA手动在线切换主 原创3(主不参与复制)
monitor 执行:slave2连接到slave1,server1 不做(主/从复制角色,停在那里) [root@monitor app1]# masterha_master_switch --co ...
- sql server where、group by、order by 执行顺序
2012-02-07 19:39 先where 条件1,再 group by 条件2再 order by 条件3 如果声明了 GROUP BY 子句,输出就分成匹配一个或多个数值的不同组里. 如果出现 ...
- 一条直线上N个线段所覆盖的总长度
原文:http://blog.csdn.net/bxyill/article/details/8962832 问题描述: 现有一直线,从原点到无穷大. 这条直线上有N个线段.线段可能相交. 问,N个线 ...
- STM32W108芯片的SWD在IAR7.30版本中不能用
提示说0x20000B8不能读,When Clear soft RAM BP
- 杂乱无章之javascript(二)
1.浏览器与事件事件通常是由浏览器所产生,不同的浏览器会产生的事件也有所不同,即使同一浏览器不同版本所产生的事件也有不同.以下为HTML4.01中的事件 2.error事件:它可以调用一个错误处理函数 ...