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

发布时间 - 2026-01-11 03:13:52    点击率:

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

今天的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到图片列表的最后

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

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

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


# angularJS  # Ionic  # 图片上传  # 上传  # javascript实现移动端 HTML5 图片上传预览和压缩功能示例  # js移动端图片压缩上传功能  # JS移动端/H5同时选择多张图片上传并使用canvas压缩图片  # Vue.js 2.0 移动端拍照压缩图片预览及上传实例  # Vue.js 2.0 移动端拍照压缩图片上传预览功能  # javascript html5移动端轻松实现文件上传  # javascript实现移动端上传图片功能  # 表单  # 会有  # 我们可以  # 做个  # 到此  # 的是  # 也会  # 不多  # 中有  # 很简单  # 不伦不类  # 这个时候  # 只需要  # 又不  # 比比皆是  # 在后面  # 只是一个  # 久而久之 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  使用C语言编写圣诞表白程序  高端云建站费用究竟需要多少预算?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  个人摄影网站制作流程,摄影爱好者都去什么网站?  Angular 表单中正确绑定输入值以确保提交与验证正常工作  Laravel如何发送系统通知?(Notification渠道示例)  EditPlus中的正则表达式实战(6)  如何用AWS免费套餐快速搭建高效网站?  原生JS实现图片轮播切换效果  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  实现点击下箭头变上箭头来回切换的两种方法【推荐】  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  网站建设要注意的标准 促进网站用户好感度!  用v-html解决Vue.js渲染中html标签不被解析的问题  在线制作视频的网站有哪些,电脑如何制作视频短片?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  android nfc常用标签读取总结  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  ,交易猫的商品怎么发布到网站上去?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  黑客入侵网站服务器的常见手法有哪些?  bing浏览器学术搜索入口_bing学术文献检索地址  如何快速上传自定义模板至建站之星?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  Laravel如何使用Vite进行前端资源打包?(配置示例)  千库网官网入口推荐 千库网设计创意平台入口  zabbix利用python脚本发送报警邮件的方法  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何快速搭建二级域名独立网站?  Laravel如何使用Eloquent进行子查询  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在阿里云通过域名搭建网站?