当前位置:首页 > 日记 > 正文

详解angularJS+Ionic移动端上传的解决办法

详解angularJS+Ionic移动端上传的解决办法

前端开发中经常会碰到图片上传的问题,网上的解决办法很多,可是有些图片上传的插件会有一些附属的插件,因此因为一个图片上传的问题可能额需要引入其他插件到项目中,久而久之项目会不伦不类,有时候插件之间也会有一些冲突,所以我们可以自己写一个图片上传的方法。

今天的demo是帮朋友做的一个移动端微信公众号项目,项目架构采用angular+ionic,因为对dom的操作jQuery会方便很多,但是jQuery比较厚重,所以最后选择用轻量级的zepto来对项目dom进行操作。

项目中有一个需求是上传个人作品,实现功能需要H5新对象 FormData对象、XMLHttpRequest对象、FileReader对象。只需要这三个对象即可,话不多说上代码。

dom结构:

js结构:

function1:

$scope.imgList = [];$scope.setUploader = function () {  var files = document.getElementById('photo');  files.click();  $(files).unbind().on('change',function (e) {    var file = e.target.value;    if (!/.(jpg|jpeg|png|GIF|JPG|png)$/.test(file)) {      common.toast('图片类型必须是jpeg,jpg,png中的一种');      return false;    };    fsubmit();    readAsBinaryString();  });};

function2:

function fsubmit() {  var itemImg = {};  var form=document.getElementById("form1");  console.log('form',form)  var formData=new FormData(form);  formData.append('wxdesigner_sid',$.fn.cookie('wxdesigner_sid'));  formData.append('id',$scope.masterInfo.id);  formData.append('pc','1');  var oReq = new XMLHttpRequest();  oReq.onreadystatechange=function(){    if(oReq.readyState==4){      if(oReq.status==200){        var json=JSON.parse(oReq.responseText);        console.log(json)        if(json.Success) {          itemImg = json.Data;          $scope.imgList=itemImg;          console.log($scope.imgList)          $scope.$apply();          itemImg = {};        }      }    }  };  console.log(oReq)  console.log(formData)  oReq.open("POST", common.api+"Wxdesigner/Designer/uploadworks");  oReq.send(formData);  return false;};//判断浏览器是否支持FileReader接口if(typeof FileReader == 'undefined'){  //使选择控件不可操作  file.setAttribute("disabled","disabled");}

function3:

function readAsBinaryString(){  var file = document.getElementById('photo').files[0];  console.log(file)  var reader = new FileReader();  //将文件以二进制形式读入页面  reader.readAsDataURL(file);  reader.onload=function(f){    $scope.masterInfo.thumblist.push(f.currentTarget.result)    console.log($scope.masterInfo)    $scope.$apply()  }}

整个图片上传的dom层很简单,一个form表单加上一个触发表单的函数(function1)。在function1中获取到<input type="file">的点击事件,在选择图片的时候会做个判断,如果超出支持的图片类型围的时候做个提醒。

然后在后面调用function2和function3。

在function2中获取form表单对象,然后创建一个FormData对象,将获取到的form表单传入FormData,然后append一些上传图片的参数。再创建一个new XMLHttpRequest对象,然后open发送XHR请求接口,send(formData)传递参数给接口。

到这个时候接口发送成功。

 这里的四个参数是formData中的四个参数

接口相应成功。

到这里有问题,图片上传成功写入数据库了,可是这时候需要在本地展示给用户看但是网页又不能直接访问设备本地的图片,因此我们需要FIleReader对象来对上传的图片文件读取为DataURL来展示在本地。

首先New 一个FileReader对象,然后将获取到的input file对象传入FileReader的 readAsDataURL()方法,此方法是将文件读取为DataURL的。

然后调用FileReader的onload方法,此方法的result会有转换之后的url,因此我们可以获取到此url,实际上是经过base64编码的。然后push到图片列表的最后

到此解决了问题,前端展示了本地的图片并且图片也写入了数据库,当页面再次刷新的时候拿到的是数据库中的数据

当然这里只是一个方法,移动端图片上传的插件比比皆是,甚至各种拖拽上传的图片上传插件也很多,此处适合项目中不用引入插件的图片上传的简单功能。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

Word中2007版设置批注的操作技巧

Word中2007版设置批注的操作技巧

设置,操作技巧,操作步骤,电脑软件,Word,  很多人可能都遇到这样的情况,要对给定的文档,进行修改,修改之处要标记出来,也就是指出要修改的地方,或者直接一点,就是新建批注。今天,小编就教大家在Word中2007版设置批注的操作技巧。Word中2007版设置…

excel表格怎么连续设置页码

excel表格怎么连续设置页码

连续,设置,方法,页码,表格,  Excel中的页码需要连续进行设置,页码具体该如何进行连续的设置呢?下面是小编带来的关于excel表格连续设置页码的方法,希望能帮到大家。!excel表格连续设置页码的方法设置页码步骤1:打开excel,点击页面设置&mdash;…

excel2003冻结首行首列的方法excel

excel2003冻结首行首列的方法excel

冻结,行首,方法,电脑软件,strong,  Excel中的首行首列具体该如何进行冻结呢?接下来是小编为大家带来的excel2003冻结首行首列的方法,供大家参考。excel2003冻结首行首列的方法冻结首行首列步骤1:单击&ldquo;视图&rdquo;选项卡,然后单击&ldqu…

如何设置PPT2010幻灯片页面大小

如何设置PPT2010幻灯片页面大小

设置,幻灯片,大小,页面,如何设置,  一般来说,PPT幻灯片页面大小都是固定的,这对于追求艺术的人来说,限制了他的发挥。这样就无法设计出令人拍案叫绝的PPT演示文稿。以下是小编为您带来的关于设置PPT2010幻灯片页面大小,希望对您有所帮助。设…

BootStrap 标题设置跨行无效的解决

BootStrap 标题设置跨行无效的解决

无效,设置,跨行,解决方法,标题,最近在使用BootStrap的表格做一个报表界面(不需要报表的功能,只需要预览并且行列定好无需根据数据量变化,如有更好的框架欢迎推荐。),发现标题设置跨行属性rowspan无效。html如下:<table class="table table-borde…

JavaScript程序设计高级算法之动态

JavaScript程序设计高级算法之动态

动态规划,程序设计,高级算法,实例分析,电脑软件,本文实例讲述了JavaScript程序设计高级算法之动态规划。分享给大家供大家参考,具体如下:主要是看了《数据结构与算法》有所感悟,虽然这本书被挺多人诟病的,说这有漏洞那有漏洞,但并不妨碍我们从中…

Word中出现文档打不开出错误时的操

Word中出现文档打不开出错误时的操

文档,错误,操作方法,打不开,操作步骤,  发现电脑里面的word无法打开,刚开始还以为是整个office崩溃了,然后又试了一下PPT灯片和excel表格,都能正常打开,只有word出问题了。今天,小编就教大家在Word中出现文档打不开出错误时的操作方法。Word中…

如何将Excel2007文本格式转换为数

如何将Excel2007文本格式转换为数

数字,文本,转换为,格式,如何将,  文本格式要将其转换成为数字?首先,文本格式可以通过设置单元格的字体格式得到。以下是小编为您带来的关于将Excel2007文本格式转换为数字,希望对您有所帮助。将Excel2007文本格式转换为数字1、选中要转换格…

JavaScript 事件对内存和性能的影

JavaScript 事件对内存和性能的影

事件,性能,内存,电脑软件,JavaScript,虽说事件处理程序可以为现代 Web 页面添加很强的交互能力,但是不分青红皂白就添加大量的事件处理程序绝对是一种愚蠢的行为。我们来分析一下:事件处理程序本质上是一种函数,是一种对象,存放在内存中,设置大…

excel 使用公式进行文本拼接的方法

excel 使用公式进行文本拼接的方法

方法,文本,公式,电脑软件,excel,  在Excel中经常需要用到公式把文本拼接起来,具体怎么做呢?接下来是小编为大家带来的excel 使用公式进行文本拼接的方法,供大家参考。excel 使用公式进行文本拼接的方法文本拼接步骤1:Excel 2013 单元格字符…

详解基于 axios 的 Vue 项目 http

详解基于 axios 的 Vue 项目 http

请求,优化,项目,详解,电脑软件,对于需要大量使用 http 请求的项目,我们通常会选择对 http 请求的方法进行二次封装,以便增加统一的拦截器,或者统一处理阻止重复提交之类的逻辑。Vue.js 的项目中我们选择使用了 axios 这样一个 http 库,下面也就…

WPS2016怎么样制作堆积柱形图图表

WPS2016怎么样制作堆积柱形图图表

图图,电脑软件,  WPS2016编辑文件的时候,想要插入图表,这就需要设计一个图表。以下是小编为您带来的关于WPS2016制作堆积柱形图图表,希望对您有所帮助。WPS2016制作堆积柱形图图表1、打开【WPS】软件。2、点击【WPS】文字下拉框中的新建,新建…