【技术干货】前端工程师看过来!一种Ajax缩放图片上传的办法 !


本文作者:上海驻云开发实施工程师 方舟

以下正文


最近做的应用里面有上传图片的功能,由于图片直接丢进阿里云OSS,所以不想通过服务器端程序来写缩放功能,查了一下找到一篇文章,点我 ,这篇总体步骤来说是OK的,但是里面有好多坑。本来准备把上传的独立一篇写出来的,后来发现太短,加到后面吧。PS:想直接看完整可以用版代码的请直接拖到最下。

首先创建Img并画到Canvas上这一步,他的代码连起来是这样的:

但是这样写Canvas里面什么都不会出现,我昨天跟这段代码战斗了小半天,才发现他应该改成:

这是因为Javascript是异步调用的,正序执行的时候img还没画出来,ctx.drawImage已经调用了,导致什么效果都有。

上面那段代码的最后一句也是个坑,在Chrome,Safari下都报错,其实应该写成:

然后要将Canvas转换成文件来上传,这篇写了这两个方法:

然而实际上mozGetAsFile只有Firefox支持,所以为了兼容Chrome跟Safari我去查了一下dataurl怎么用。这个原文就找不到了,也被坑了一次,搜索到的前几条好多BlobBuilder的,这玩意不知道什么时候就deprecated了,最新版的Chrome跟Safari都没这类,最终找到了一个ArrayBuffer直接转换blob的代码:

这段代码在Chrome里面用的毫无问题,但是Safari生成的blob只有十几字节,这明显不科学。MDN Blob 上查到可以直接把ArrayBuffer传到Blob构造函数里面,于是就变成了

现在圆满了,就剩一个小问题,Chrome下会提示把ArrayBuffer传入Blob构造函数的行为deprecated了。

接下来就是文件上传了,用到了jQuery。

这个没啥坑,有个小问题,按之前的办法生成的Blob拿过来上传的时候在Firefox里面无法显示Progress,应该是Firefox只有上传文件才有prgress事件。

以下是完整可用代码:

好啦 ~ ~ ~ 本文到这里也就结束啦 ~ 如果还希望了解更多相关知识的话,就赶紧订阅我们吧~每天新鲜干货送上呦 ~

时间: 2024-10-05 21:30:26

【技术干货】前端工程师看过来!一种Ajax缩放图片上传的办法 !的相关文章

两种php实现图片上传的方法_php技巧

图片上传在项目中经常用到,几乎没有任何一个项目可以脱离图片或者是文件上传.本篇我在这向大家介绍两种常规的上传方式.(注:在这里我们仅仅是对功能的实现,不去做过多的前端的样式)一.利用form表单上传 此种方式是最原始的上传方式,前端就是简单的form表单,后端我们有PHP处理传输过来的文件. 首先看前端的代码 upload.html <form action="handle.php" name="form" method="post" en

dwz前端框架+ssh后天框架 如何实现图片上传

问题描述 dwz前端框架+ssh后天框架 如何实现图片上传 我写了一个案例,但是后台action获取不到文件流,可是,我单独调用这个页面时候,就可以获取到文件流,我真心不知道怎么处理了?是不是由于本框架的原因呢? 不知道大神们有没有好一点的上传案例或者解决方案.我用的是比较落后的DWZ中uploadify多文件上传? 急急急!!!!! 解决方案 我做的公司运营平台也是dwz前端框架+ssh,废话不说,解决方案如下.给你提供个项目遇到的实例,不懂可以再问我哈: 1,首先,封装了一个上传文件(包含图

Web应用安全之八种安全的文件上传方式(1)

为了让最终用户将 文件上传到您的网站,就像是给危及您的服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高您的业务效率.在Facebook和Twitter等社交网络的Web应用程序,允许文件上传.也让他们在博客,论坛,电子银行网站,YouTube和企业支持门户,给机会给最终用户与企业员工有效地共享文件.允许用户上传图片,视频,头像和许多其他类型的文件.498)this.w idth=498;' onmousewheel = 'java

js前端实现多图图片上传预览的两个方法(推荐)_javascript技巧

一.将图片转成icon码的实现方式 html代码: <div class="yanzRight"> <input style="margin-top:5px;float: left;" id="st18" name="evidence" onchange="previewImage(this,5)" type="file"/> <span class=&qu

【JAVA秒会技术之图片上传】基于Nginx及FastDFS,完成图片的上传及展示

基于Nginx及FastDFS,完成商品图片的上传及展示 一.传统图片存储及展示方式      存在问题: 1)大并发量上传访问图片时,需要对web应用做负载均衡,但是会存在图片共享问题 2)web应用服务器的存储空间有限,它是web应用服务器,而不是存储服务器. 3)web应用服务器的本身的io读写性能不高,图片上传下载时,速度偏慢 4)web应用服务器访问图片时,由于图片内容较大,并发量大的时候,会占用web应用服务器的带宽,这样该web应用服务器的其他功能就会受到较大的影响.    解决方

js HTML5多图片上传及预览实例解析(不含前端的文件分割)_javascript技巧

本文实例为大家分享了js HTML5多图片上传及预览实例,供大家参考,具体内容如下 主要运用  1.HTML5 files可以选择多文件,以及获取多文件信息  2.XMLHTTPRequest对象,发送HTTP传输请求  3.将每一个文件放在FormData,进行传输  4.利用readAsDataURL将图片内容直接变成url,放在img标签的src当中,生成可预览的图片  html+css+js代码  <!DOCTYPE html> <head> <meta http-e

请高手看下,下面红色的动态Input上传的图片怎么没有赋值给PIC3

问题描述 请高手看下,下面红色的动态Input上传的图片怎么没有赋值给PIC3.上传图片将地址和文件名给PIC3,然后从数据库中取出并显示.当提交保存的时候,一直是数据库中旧的值.不知道问题出在哪儿?是不是循环中的动态input有问题?谢谢!<%dimpaixuifrs.EOFandrs.BOFthenresponse.Write"<divalign=center><fontcolor=red>还没有分类</font></center>&qu

项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)_javascript技巧

第一个项目终于上线了,是一个叫亲青筹的公益众筹平台,微信端,电脑端还有后台界面大部分都是我完成的,几个月过来,感觉收获了很多,觉得要总结一下. 首先想到的是图片上传的问题.在通常表单数据都是ajax上传的情况下,为了上传图片而去使用form表单感觉很蠢.然后那时候也没有想到用jquery form插件. 后台的同事给的方案是用iframe里写一个form表单,然后上传图片之后自动提交表单,他将图片在服务器上的地址以跳转页url的一部分,我再来截取的方式. 方案一:iframe+form表单 <f

图片上传的第二种形式

之前有说了一种以base64的图片上传形式,这次来说说另外一种,其实很简单,很早以前都是在form提交的时候再controller中处理,现在基本不会这么做,都是通过ajax来实现异步上传的 首先需要引入jquery.ui.widget.js以及jquery.fileupload.js这两个js, HTML代码: <div> <input id="idcardImagePositiveFileUpload" type="file" name=&qu