angular图片上传

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

html代码:

当input出发change事件会调用touchUpdateImg方法,传入file对象和需要展示得到imgsmall属性,通过FileReader对象读取文件对象,我使用了apply使apply进行了监听,之前不使用apply时,没有实时展示图片。

<div class="imglist"><div class="imglist-title">商品相册</div><div class="imglist-content"><div class="imglist-item"><input class="oneimg" type="file" name="oneimg" onchange="angular.element(this).scope().touchUpdateImg(this.files,'imgSmall1')" ng-model="imgSmall1"><img class="handle-inp" id="imgSmall1" ng-src="{{imgSmall1}}" /><div class="mast-delete" ng-if="deleteImg[0]"><div class="delete-img" ng-click="touchDeleteImg(0,'imgSmall1')">x</div></div></div><div class="imglist-item"><input class="oneimg" type="file" name="oneimg" onchange="angular.element(this).scope().touchUpdateImg(this.files,'imgSmall2')" ng-model="imgSmall2"><img class="handle-inp" id="imgSmall2" ng-src="{{imgSmall2}}" /><div class="mast-delete" ng-if="deleteImg[1]"><div class="delete-img" ng-click="touchDeleteImg(1,'imgSmall2')">x</div></div></div><div class="imglist-item"><input class="oneimg" type="file" name="oneimg" onchange="angular.element(this).scope().touchUpdateImg(this.files,'imgSmall3')" ng-model="imgSmall3"><img class="handle-inp" id="imgSmall3" ng-src="{{imgSmall3}}" /><div class="mast-delete" ng-if="deleteImg[2]"><div class="delete-img" ng-click="touchDeleteImg(2,'imgSmall3')">x</div></div></div><div class="imglist-item"><input class="oneimg" type="file" name="oneimg" onchange="angular.element(this).scope().touchUpdateImg(this.files,'imgSmall4')" ng-model="imgSmall4"><img class="handle-inp" id="imgSmall4" ng-src="{{imgSmall4}}" /><div class="mast-delete" ng-if="deleteImg[3]"><div class="delete-img" ng-click="touchDeleteImg(3,'imgSmall4')">x</div></div></div></div></div>

js代码

model的代码,我在model了做了初始化的操作,就是没选则时默认图片

这里写图片描述

service.goodsObj['imgArr'] = {'imgBig':'image/supplier/add_big2.png','imgSmall1':'image/supplier/add_small2.png','imgSmall2':'image/supplier/add_small2.png','imgSmall3':'image/supplier/add_small2.png','imgSmall4':'image/supplier/add_small2.png'};
controller里是获取model里定义的数组,进行一开始的赋值

这里写图片描述

$scope.imgObj          = AddGoodsModel.goodsObj['imgArr'];$scope.file            = AddGoodsModel.goodsObj['file'];$scope.imgBig     		= $scope.imgObj['imgBig'];$scope.imgSmall1    	= $scope.imgObj['imgSmall1'];$scope.imgSmall2    	= $scope.imgObj['imgSmall2'];$scope.imgSmall3    	= $scope.imgObj['imgSmall3'];$scope.imgSmall4    	= $scope.imgObj['imgSmall4'];
// 上传图片function _touchUpdateImg(obj,imgobj){var file = obj[0];console.dir(file);// 判断文件的类型var name = file['name'];var postfix = name.substring(name.lastIndexOf(".")+1).toLowerCase();if(postfix !="jpg" &&  postfix !="png" && postfix != "jpeg" && postfix != "gif"){$scope.toast('上传的文件的类型只能是jpg、png、jpeg、gif');return false;}// 判断是不是大图if(imgobj == 'imgBig'){AddGoodsModel.emptyFile = false;$scope.emptyFile = false;}// 获取文件读取对象var reader = new FileReader();reader.readAsDataURL(file);reader.onload = function (e) {   $scope.$apply(function () {// 判断文件的大小if(file['size'] > 1048576){dealImage(e.target.result,angular.element('#'+imgobj)[0],function(base64){$scope[imgobj] = base64;$scope.imgObj[imgobj] = encodeURI($scope[imgobj]);$scope.file[imgobj]['size'] = file['size'];$scope.file[imgobj]['type'] = file['type'];});$scope.toast('文件太大,请稍等!');return false;}  $scope[imgobj] = e.target.result;$scope.imgObj[imgobj] = encodeURI($scope[imgobj]);$scope.file[imgobj]['size'] = file['size'];$scope.file[imgobj]['type'] = file['type'];})}            }// 使用canvas对图片进行绘制function dealImage(path, obj, callback){var img = new Image();img.src = path;img.onload = function(){var that = this;// 默认按比例压缩var w = that.width,h = that.height,scale = w / h;w = obj.width || w;h = obj.height || (w / scale);var quality = 0.8;  // 默认图片质量为0.7//生成canvasvar canvas = document.createElement('canvas');var ctx = canvas.getContext('2d');// 创建属性节点var anw = document.createAttribute("width");anw.nodeValue = w*1.5;var anh = document.createAttribute("height");anh.nodeValue = h*1.5;canvas.setAttributeNode(anw);canvas.setAttributeNode(anh); ctx.drawImage(that, 0, 0, w*1.5, h*1.5);// 图像质量if(obj.quality && obj.quality <= 1 && obj.quality > 0){quality = obj.quality;}// quality值越小,所绘制出的图像越模糊var base64 = canvas.toDataURL('image/jpeg', quality );// 回调函数返回base64的值callback(base64);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

千万创业者的自白:踩过坑才明白这些真相!

“大众创业、万众创新”的浪潮正兴&#xff0c;随着国家对自主创业扶持力度的加强&#xff0c;中国的初创企业正在蓬勃发展&#xff0c;据统计&#xff0c;最近五年中国新注册的公司约有3000万家。 而另一方面&#xff0c;在轰轰烈烈的创业大潮中&#xff0c;市场竞争指数也急…

SpringBoot2 集成 skywalking 实现链路追踪

文章目录1. 启动skywalking2. 配置探针3. 启动项目4. 测试验证5. 效果图1. 启动skywalking cd D:\apache-skywalking-apm-bin\binwindows环境&#xff1a; 双击startup.bat linux环境&#xff1a; startup.sh2. 配置探针 -javaagent:D:\apache-skywalking-apm-bin\agen…

以“基”取胜:戴尔科技云平台 释放企业新动能

2020年春天&#xff0c;以云计算、5G、人工智能为代表的“新基建”蔚然成风&#xff0c;不仅助力中国产业智能化、信息化进入加速推进的快车道&#xff0c;促使全产业链迈开高质量发展的新步伐。更是面向长远&#xff0c;构筑数字经济创新发展之基。可以说&#xff0c;没有任何…

Nexus协议,闲鱼一体化开发的幕后玩家

Serverless是这几年兴起的一个概念&#xff0c;Serverless可以帮助开发者减轻甚至摆脱传统后端应用开发所需要的服务器设备的设置和运维工作&#xff0c;并以服务接口的方式为开发者提供所需要的功能。它希望开发者更加专注于应用逻辑本身&#xff0c;而不是被琐碎的基础设施细…

angular封装富文本编辑器指令

这个富文本编辑器的基本用法可以去该编辑器作者的github看下 (https://github.com/echosoar/medit) html代码和css 原版&#xff1a; 改版的&#xff1a; /*富文本编辑器*/#meditToolBar {position:fixed;z-index:100;width:100%;left: 0;bottom: 0;height:40px;background:…

日处理数据量超10亿:友信金服基于Flink构建实时用户画像系统的实践

导读&#xff1a;当今生活节奏日益加快&#xff0c;企业面对不断增加的海量信息&#xff0c;其信息筛选和处理效率低下的困扰与日俱增。由于用户营销不够细化&#xff0c;企业 App 中许多不合时宜或不合偏好的消息推送很大程度上影响了用户体验&#xff0c;甚至引发了用户流失。…

玛莎拉蒂“跨界”腾讯车联打造车载互联系统,新Ghibli “触电新生”

7月17日&#xff0c;玛莎拉蒂首款“触电”车型新Ghibli正式发布&#xff0c;与新亚太区代言人——锋芒玩家陈伟霆先生共同亮相&#xff0c;诠释年轻无畏的先锋态度。在创新科技方面&#xff0c;新Ghibli率先搭载了玛莎拉蒂与腾讯车联共同打造的全新车载互联系统。 【玛莎拉蒂新…

认识Java异步编程

一 、认识异步编程 通常Java开发人员喜欢使用同步代码编写程序,因为这种请求(request)/响应(response)的方式比较简单&#xff0c;并且比较符合编程人员的思维习惯;这种做法很好&#xff0c;直到系统出现性能瓶颈&#xff1b;在同步编程方式时由于每个线程同时只能发起一个请求…

使用MultipartFile实现文件上传_SpringMVC

文章目录一、单文件上传1. 创建上传表单2. 新增配置3. 编写上传控制类4. 接收参数5.文件保存路径6. 转存文件二、多文件上传2.1. 创建上传表单2.2. 编写上传控制类2.3. 保存文件三、MultipartFile类常用方法这篇文章主要为大家详细介绍了SpringMVC使用MultipartFile实现文件上传…

解决vue里iscroll(better-scroll)点击触发两次和初始化无法滚动问题!

这两个插件我用过好几次&#xff0c;有时候很顺利&#xff0c;不顺利的时候真的很麻烦&#xff0c;一直无法滚动&#xff0c;明明style里已经有样式了&#xff0c;就是滚动不了。 先说下在vue里的三种的引入方式&#xff1a; 在index.html文件里通过script的方式引入进来&…

云原生应用万节点分钟级分发协同实践

导读&#xff1a;2019 年天猫 双11&#xff0c;阿里巴巴核心系统首次实现 100% 上云。面对全球最大的交易洪峰&#xff0c;阿里云扛住了每秒 54.4 万笔的交易峰值&#xff0c;这是“云原生”与“天猫全球狂欢节”的一次完美联名。 &#xff08;图为 2019 年天猫 双11 成交额&am…

为啥Underlay才是容器网络的最佳落地选择

导语&#xff1a; 几年前&#xff0c;当博云启动自研容器网络研发的时候&#xff0c;除了技术选型的考虑&#xff0c;我们对于先做 Underlay 还是 Overlay 网络也有过深度的讨论。当时的开源社区以及主流容器厂商&#xff0c;多数还是以 Overlay 网络方案为主&#xff0c;但在我…

oracle用户编辑文件中文乱码

文章目录一、分析定位1. 现象2. 查看当前编码3. 配置文件现状二、解决方案2.1. 编辑配置文件2.2. 调整2.3. 刷新环境变量2.4. 效果图2.5. 配置文件源码一、分析定位 1. 现象 2. 查看当前编码 登录oracle用户&#xff0c;查看当前oracle用户下的编码 [oraclelocalhost ~]$ ec…

今年圣诞,麋鹿第一次请假

年末的圣诞节来啦~~&#xff01; 但我们的圣诞老人为什么有点低落&#xff1f;&#xff1f; 是在愁信太多&#xff1f;没地儿放&#xff1f; 不会是看不懂我信上的“鬼画符”吧.. 难道是在忌惮空中的雾霾&#xff1f;哈哈~ 圣诞老人&#xff1a;o(╥﹏╥)o 不不不&#xf…

支付宝和微信的JSSDK发起支付

支付宝&#xff1a; 引入alipay的jsapi文件&#xff1a; <script src"https://a.alipayobjects.com/g/h5-lib/alipayjsapi/3.0.6/alipayjsapi.min.js"></script> 点击支付按钮调用的后台创建交易的接口&#xff0c;返回tradeNO this.API.trade_create…

高德网络定位算法的演进

1.导读 GPS定位精度高&#xff0c;且早已成为移动设备标配&#xff0c;但GPS也具有一些难以克服的缺陷&#xff0c;包括&#xff1a; 冷启动时间长。GPS启动时&#xff0c;需要进行搜星&#xff0c;锁定卫星信号&#xff0c;然后再进行位置技术&#xff0c;这个过程可能会达到…

获取当天日期、昨天日期

package com.gblfy.util;import org.junit.Test; import org.springframework.stereotype.Component;import java.text.SimpleDateFormat; import java.util.Date;Component public class DateDeal {//日期格式化static SimpleDateFormat simpleDateFormat new SimpleDateForm…

疫情之下网络安全如何保障?Akamai防护方案前来“保驾护航”

2020年春天&#xff0c;以5G、人工智能、云计算为代表的“新基建”蔚然成风&#xff0c;着眼国家数字经济体系建设&#xff0c;打造数字经济体系底座的“新基建”&#xff0c;无疑成为中国经济整体应对未来发展的核心方案。然而&#xff0c;面临“新基建”与企业数字化进程的突…

2020将至,谈谈中小企业创业的那些事儿

2019正迎来尾声&#xff0c;在创业这场轰轰烈烈的旅途中&#xff0c;有的人名利双收&#xff0c;有的人饱受非议。一入创业深似海&#xff0c;在创业赛道上&#xff0c;很多公司完成了从0到1&#xff0c;却死在从1到100的路上。而小程序的出现&#xff0c;让移动互联网创业走向…

axios从安装到使用的教程

安装axios: npm install --save axios 目录结构: 红框部分是接口文件&#xff1a; appApi.js是存放接口的文件 import Vue from vue import axios from axiosexport default {// 获取分类show_category: function () {return axios.post(/point-api-show_category);},// 获…