在编写前台页面的时候,有时须要将选中的图片夹杂着其它信息一起上传到服务端,在选着本地图片的时候,为了获得更好的效果,须要将该图片显示在页面上。

最初思路有两个。详细例如以下:

1、获取选中文件的二进制数据再传递给画板,画出图片来。

2、获取选中文件的传递给Img标签。

经过測试,得到例如以下结果:

1、Img标签的src无法指向本地路径的文件,这应该是基于安全考虑的结果吧。

2、通过File API 读取的文件二进制数据无法直接传递给Cancav画板画出选中图片,这也许也是基于安全考虑的结果。

3、经过不懈努力。最终发现了一个解决方法,那就是通过File API的FileReader对象的readAsDataURL将本地图片创建出一个虚拟URL传递给Img标签的src。

具体代码例如以下:

当前项目是基于EasyUi的。以下是页面的对话框代码,请关注id="announcePicture"的文件控件,系统要求在该文件控件选择一个图片文件时,将其显示在id="img"的Img标签中。

<div id="announceDlg" class="easyui-dialog" style="width:400px;height:550px;padding:10px 20px" closed="true" buttons="#announceDlg-buttons">
<div class="ftitle">公告信息</div>
<form id="fm" method="post" enctype="multipart/form-data">
<div class="fitem">
<label>公告Id:</label>
<input id="announceId" name="announceId" class="easyui-textbox" type="text" value="">
</div>
<div class="fitem">
<label>标题:</label>
<input type="text" id="announceTitle" name="announceTitle" class="easyui-textbox" value="" data-options="required:true">
</div>
<div class="fitem">
<label>文件:</label>
<input class="easyui-filebox" id="announcePicture" name="announcePicture" value="" style="">
</div>
<div class="fitem">
<label>内容:</label>
<input type="text" id="announceContent" name="announceContent" class="easyui-textbox" value="" data-options="iconCls:'icon-search',multiline:true,required:true" style="height:120px">
</div>
<div class="fitem">
<label></label>
<img id="img" style="width:160px;height:160px" />
</div>
</form>
</div>
<div id="announceDlg-buttons">
<a href="javascript:void(0)" class="easyui-linkbutton c6" iconcls="icon-ok" onclick="save()" style="width:90px">Save</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconcls="icon-cancel" onclick="javascript:$('#announceDlg').dialog('close')" style="width:90px">Cancel</a>
</div>

以下是对EasyUI进行的拓展,添加了getFile方法。该方法能够获取当前FileBox对象选中的文件的File对象。

$.extend($.fn.filebox.methods, {
getFile: function (myself) {
var temp = $(myself).next().children("[type='file']");
var file = document.getElementById(temp.attr("id")); if (file.files.length > 0) {
// 若选中一个文件,则返回该文件的File对象
return file.files[0];
} // 若未选中不论什么文件,则返回null
return null;
}
});

以下是设置FileBox对象的OnChange事件,当选择一个图片后。执行当中定义的事件处理函数:

$("#announcePicture").filebox({
onChange: function (event) { // 获取所选文件的File对象
var file = $(this).filebox("getFile"); if (file != null) {
// 创建FileReader对象
var reader = new window.FileReader();
// 定义reader的onload事件
// 当读完文件信息后触发onload事件
reader.onload = function (e) {
// reader.result保存着产生的虚拟URL
$("#img").attr("src", this.result);
}
// 读取指定文件并形成URL
reader.readAsDataURL(file);
}
}
});

细心的各位一定会发现,在FileBox对象的OnChange事件处理函数内调用getFile时并未传递不论什么阐述。可是在getFile函数中却有一个myself參数被运用了。要了解这点须要看一下EasyUI中处理FileBox的源码:

$.fn.filebox = function (_4ed, _4ee) {
if (typeof _4ed == "string") {
var _4ef = $.fn.filebox.methods[_4ed];
if (_4ef) {
return _4ef(this, _4ee);
} else {
return this.textbox(_4ed, _4ee);
}
}
_4ed = _4ed || {};
return this.each(function () {
var _4f0 = $.data(this, "filebox");
if (_4f0) {
$.extend(_4f0.options, _4ed);
} else {
$.data(this, "filebox", {
options: $.extend({}, $.fn.filebox.defaults, $.fn.filebox.parseOptions(this), _4ed)
});
}
_4ea(this);
});
};

看到 return _4ef(this, _4ee); 这句语句了吗?EasyUI在调用指定方法时,默认第一个參数为当前对象,而实际传入的參数,则作为第二个參数来使用。

怎样扩展EasyUI在页面中马上显示选中的本地图片的更多相关文章

  1. 页面中直接显示FTP中的图片

    页面中直接显示FTP中的图片 FTP根目录下有一张图片,如下 第一步: 通过如下格式,在浏览器上输入路径,确定可看到图片 ftp://root:root@127.0.0.1/111.png ftp:/ ...

  2. java web中日期Date类型在页面中格式化显示的三种方式

    一般我们经常需要在将服务器端的Date类型,传到页面进行显示,这就涉及到一个如何格式化显示Date类型的问题,一般我们有三种方式进行: 1)在服务端使用SimpleDateFormat等类格式化成字符 ...

  3. 引号在jsp页面中正确显示的处理

    写在前面: 在前面的博客中已经有了对一些特殊字符的处理,但是万万没有想到,出来了一个含有引号的字符串,比如这样的ab"c"d的一个字符串.如果在超链接传值的时候,会与前面的引号成对 ...

  4. 百度地图api在Html中显示,在jsp页面中不显示解决方法

    在jsp页面中显示如下 但是在html中正常显示. 原来的代码如下: <script type="text/javascript" src="http://api. ...

  5. 同一标签内多个css规则在页面中如何显示?

    这两天在学习css涉及到内联.外联.嵌入对页面的影响: 1.内联式-----将css代码直接写在html中.用 <style> 标记将样式定义为内部块对象.示例代码如下如下: <st ...

  6. 关于jsp页面中时间显示问题

    首先说明一下情况,在MySQL数据库中获取的时间显示在jsp页面中不是按指定格式显示,显示的是类似于这种--Tue Jun 18 00:00:00 CST 2013.而想要的仅仅是年月日而已. 对于这 ...

  7. angularjs中只显示选中的radio的值

    angularjs中,只显示选中的radio的值.主要是相同的radio,name属性值要相同还有ng-model的值要相同,同时要指定value值.这样选中的时候就会在下面的div中显示选中的值了. ...

  8. \r\n 如何转换成utf-8格式的,在jsp页面中正常显示换行

    数据库中存的换行是\r\n,读取到UTF-8编码的JSP 页面上以后,没有换行 在jsp页面显示之前,要进行一下字符转换,将所有\r\n转换成<br>,如下: String result  ...

  9. mvc页面中,显示自定义时间格式

    1.在model中,遇到datetime格式的字段,用string来表示 model中 /// <summary> /// 开始时间 /// </summary> [Displ ...

随机推荐

  1. PHP 中空字符串介绍0、null、empty和false之间的关系

    0是数字,是empty,是false,不是null,值相当于空字符串,但类型不是字符串,去空格或强制转换为字符串型时不等于空字符串 ""的值相当于0,是empty,是空字符串,是f ...

  2. faster rcnn环境编译

    步骤和fast rcnn的编译一样,在编译中遇到了一个问题: 刚开始是以为python-numpy没有安装到位,后来发现是Makefile.config的配置出现了问题.原来的配置是: PYTHON_ ...

  3. vue在传值的时候经常遇到的问题

    在我用vue编写程序的时候,在传值的时候,经常会遇到些问题,像今天遇到了两个问题,在用父传子的方法去传值,当父组件中的要传的数据是for循环出来的或者是列表的时候,你想每次运行的事件,都去传某一行,或 ...

  4. 通过洛谷P2639看01背包

    题目描述 Bessie像她的诸多姊妹一样,因为从Farmer John的草地吃了太多美味的草而长出了太多的赘肉.所以FJ将她置于一个及其严格的节食计划之中.她每天不能吃多过H ( <= H &l ...

  5. dll加载遇到的问题

    dll加载有两种形式,分别是隐式加载和显式加载. 隐式加载在编译的时候就将dll文件编译到可执行文件中去,程序发布的时候可以不用讲dll带着.缺点是,这样编译出来后,程序会很大. 显式加载是指在程序运 ...

  6. CAS机制(多线程)

    ---- 什么是CAS机制 CAS机制主要是发生于Java中原子操作类(JUC)的底层实现中,其中在CAS机制中包含3个基本参数:内存地址V.旧预期值A.要修改的新值B. 当要更新一个变量的时候,只有 ...

  7. 如何用纯 CSS 创作一种按钮被瞄准的交互特效

    效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. 在线演示 https://codepen.io/zhang-ou/pen/ELWMLr 可交互视频教程 此视 ...

  8. HTML5编辑API之Range对象

    Range对象代表页面上的一段连续区域,通过Range对象,可以获取或修改页面上的任何区域,可以通过如下创建一个空的Range对象,如下: var  range = document.createRa ...

  9. C语言学习9

    婚礼的谎言 三对情侣参加婚礼,三个新郎为A.B.C,三个新娘为X.Y.Z.有人想知道究竟水域谁结婚2,于是就问新人中的三位,得到结果如下:A说他将和X结婚:X说她的未婚夫是C:C说他将和Z结婚.这人事 ...

  10. 05 selenium模块

    selenium模块 selenium selenium是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作. selenium最初是一个自动化测试工具,而爬虫中使 ...