唉,为什么我一个做大数据和后端的要为前端耗尽心力啊??!!

昨天在做一个网页时遇到了一个问题,有一处需要插入图片,我原本的想法是获取到上传文件的URL,然后动态插入img标签,设置src为图片的URL进而实现实时预览,结果遇到了浏览器安全防护的问题,获取到的文件路径被浏览器主动修改为了“C://fakePath/XXX”的形式。

经过查询,发现了问题所在,并有两种解决方法,一是关闭浏览器的安全验证(见鬼去啦!),二是通过window.URL.createObjectURL(obj)获取图片的URL。

方法一是不可能用的了,那么就试试第二种,但是也不知道出了什么问题,这个方法也没有作用。

就在我即将放弃,打算用“文件1”“文件2”的形式来代替实时预览时,一个方案拯救了我!!!

首先贴上原地址:https://blog.csdn.net/scrat_kong/article/details/79230329

这个方法是就是通过FileReader直接读取文件内容到浏览器中!相比使用URL引用图片,这个简单直接又粗暴,直接将数据读到浏览器里展示!

  

FileReader对象读取到的数据就存放在当前对象的result属性中,如图所示:

  

效果展示:

  

基于这个方法,我对代码进行了修改,如下所示:

  

这样就可以实现图片动态插入试试预览了,相比引用URL,该方法的区别有:

  1)非引用,而是直接将图片(数据)插入到了网页中;

  2)如果插入的图片过多可能会导致浏览器停止响应(可能是占用内存的原因);

其中2)我就遇到过,因此在图片插入后请务必使用FileReader.abort()方法终止文件读取。

此外,既然能够读取到文件的内容,那么是否可以直接通过字符数量判断文件大小?

我对此进行了验证,通过多张图片的字符长度和实际字节长度的对比,我发现FileReader对象读取到的文件字符长度和文件实际字节长度的比值大概是1.33。

也就是说,通过如下语句可以求出文件的大小:

  var fileSize = this.result.split(",")[1].length/(1024*1024*1.33);

通过多次验证,该方法获取到的文件容量大小误差在10KB以内。如下所示:

  

  

  

最终,通过这种方法,实现了上传图片的大小判断和实时预览:

  

(JavaScript)实现上传图片实时预览和(文件)大小判断的更多相关文章

  1. MWeb 1.4 新功能介绍一:引入文件夹到 MWeb 中管理,支持 Octpress、Jekyll 等静态博客拖拽插入图片和实时预览

    之前在 MWeb 中打开非文档库中的 Markdown 文档,如果文档中有引用到本机图片,是没办法在 MWeb 中显示出来和预览的.这是因为 Apple 规定在 Mac App Store(MAS) ...

  2. js实现上传图片本地预览功能以及限制图片的文件大小和尺寸大小

    方法一: js: /**     * 上传图片本地预览方法     * @param {Object} fileObj 上传文件file的id元素  fresh-fileToUpload      * ...

  3. 自己动手开发更好用的markdown编辑器-04(实时预览)

    这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/25/hexomd-04/   程序打包   文章目录 1. 打开新窗口 ...

  4. Sublime写MarkDown实时预览

    [TOC] Sublime写MarkDown实时预览 Sublime作为神器,实至名归. 首先 1.安装Sublime,并安装Package Control,这里不多说. 2.安装MarkDown P ...

  5. Sublime、Webstorm等在APICloud平台上全面支持WiFi真机同步和实时预览功能

    APICloud工具插件包括APICloud Studio.Sublime Text和Webstorm全面为开发者提供iOS和Android平台真机同步调试功能,不仅可以通过USB方式进行APP真机同 ...

  6. TypeWonder – 在任何网站上实时预览字体效果

    TypeWonder 让网页字体的选择过程变得轻松愉快.它可以帮助您在任何网站上快速测试 Web 字体效果!输入网站网址,就能够即时预览的字体的实际效果,还可以从数百种字体中进行挑选,您还可以得到所需 ...

  7. APICloud全面支持WiFi真机同步和实时预览功能

    APICloud工具插件包括APICloud Studio.Sublime Text和Webstorm全面为开发者提供iOS和Android平台真机同步调试功能,不仅可以通过USB方式进行APP真机同 ...

  8. 新增WiFi真机同步与实时预览功能 简化真机调试步骤

    APICloud工具插件为开发者提供iOS和Android平台真机同步调试功能,不仅可以通过USB方式进行APP真机同步功能,更新增WiFi真机同步和WiFi真机实时预览两大功能,方便开发者在开发过程 ...

  9. UI实时预览最佳实践(转)

    UI实时预览最佳实践 概要:Android中实时预览UI和编写UI的各种技巧.本文的例子都可以在结尾处的示例代码中看到并下载.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以 ...

随机推荐

  1. python 什么是闭包

    1.啰嗦一下 学这个知识点的时候,我本来想先了解下定义, 知道个大概再说, 翻了几篇博客,基本上都是有例子带着进入理解这块.即使读了定义,思想还是不能显出个框架. 想吃快餐,有些行,有些就不可以(这里 ...

  2. 网站https证书SSL证书相关

    网站https证书SSL证书相关 二级域名可以申请证书来使用,主域名申请的单域名证书,二级域名不在https加密保护内,通配符证书可以保护主域名下所有的二级子域名,二级域名等于和主域名使用的同一张证书 ...

  3. 最短路径 SPFA P3371 【模板】单源最短路径(弱化版)

    P3371 [模板]单源最短路径(弱化版) SPFA算法: SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA 最坏情况下复 ...

  4. Centos 7 磁盘阵列配置介绍(RAID)

    转自:https://blog.51cto.com/gaowenlong/2086918 Centos 7 磁盘阵列配置介绍每当我们提到磁盘阵列,相信广大管理员并不陌生,比如我们一般安装服务器系统的时 ...

  5. get 和 post 请求的区别,一个不错的链接

    https://www.cnblogs.com/logsharing/p/8448446.html

  6. 网页静态化技术--Freemarker入门

    网页静态化技术:为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又 ...

  7. 打印word文档时遇到标记区如何取消

           故障描述:word页面显示正常,打印以及打印预览的时候,页面上会出现部分暗色区域(标记区)        故障原因:简单标记惹的祸        解决办法:word菜单栏-审阅-简单标记 ...

  8. ASCII对应码表-键值(完整版)

    ASCII对应码表-键值(完整版) Bin (二进制) Oct (八进制) Dec (十进制) Hex (十六进制) 缩写/字符 解释 0000 0000 00 0 0x00 NUL(null) 空字 ...

  9. oracle网络服务之beq协议和SDU优化(性能提升可达30%)

    oracle网络服务之beq协议和SDU优化(性能提升可达30%) 12.3.1  BEQ协议 如果Oracle数据库服务端和客户端在同一台机器上,可以使用BEQ连接,BEQ连接采用进程间直接通信,不 ...

  10. Java线程基础(一)

    说在前面,经过一段学习过后,自己发觉线程在Java中占有举足轻重的地位,总觉得如此复杂的线程知识点一定要好好理清才好消化,因而有了这篇文章. 但因鄙人资历尚浅,如有遗漏错误之处还请广大网友不吝赐教. ...