talk is cheap show me the code

<input type="file" id="file" name="file"
ng-model="Ctrl.picture"
accept="image/jpeg,image/png,image/jpg"
onchange="angular.element(this).scope().deCtrl.handleConFiles(this.files)">

坑一:angularJS的input-file会让ng-change失效

解决办法是用onchange覆盖ng-change,格式为:

onchange="angular.element(this).scope().yourfunction()

如何才能获取图片的base64编码?

HTML代码里,onchange事件触发的handleConFiles函数,如下:

 function handleConFiles(files){
var file = files[0];
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(theFile) {
console.log(theFile.target.result) //base64编码
};
}

注意第二行,file=files[0],如果不加这一行,会报错

Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.

具体原因暂时还不清楚,猜测是参数类型的问题,欢迎dalao们留言指正。

FileReader()读取文件,readAsDataURL读取指定file or Blob对象中的内容。关于更多FileReader的知识,猛戳这里

theFile.target.result就是需要的图片base64编码,也不完全是。

这里获取的base64字符串具有一定的格式,console.log(theFile.target.result)会发现,打印出来的数据为:

data:image/png;base64,base64string

前缀是对后面字符串的修饰和说明,指明这是一张图片的base64编码字符串,因此如果需要做图片预览,直接赋值给src就可以了

<img ng-src="{{Ctrl.picture}}">

到此获取到了图片的base64编码,结束?

NO!

这里还有一个坑。。。。

虽然获取到了图片的base64编码,同时也绑定到了picture上,但是提交表单的时候,picture的值为C://fakepath/图片名。

猜想是由于ng-model绑定着picture的值,选取文件默认赋值为C://fakepath/..因而后续的表单操作使得已经获取到的base64编码字符串被覆盖。picture的值还原为C://fakepath/..

解决办法:获取到base64编码之后,用一个变量存储该字符串,在提交表单时再赋值给picture

本篇完!

angularJS <input type="file> 图片的base64编码的更多相关文章

  1. input type=file 图片上传相关

    HTML: <input type="file" name="address"   onchange='PreviewImage(this)' value ...

  2. input type = file 上传图片转为base64

    项目背景是做图片识别,接口需要上传图片格式为base64格式的,react项目的相关代码: let reader = new FileReader();reader.readAsDataURL(e.t ...

  3. 将input type="file" 类型的图片文件转成base64

    带有图片的form表单上传数据是很麻烦的,因为图片通常都是和文字分开上传,这是很麻烦的,所有吧图片转成base64就可以和当成文字上传了.话不多少,看代码: 首先定义一个类型为file的input标签 ...

  4. 有关图片上传的相关知识input type=file,HTML5的 input:file上传类型控制

    遇到项目,要求做一个影像系统,对于前端开发需要了解file的相关属性,以及如何开发.工欲善其事,必先利器嘛.度娘一阵子搜索,找资料.这年头,需要的是你解决问题的能力啊! 参考应用:https://ww ...

  5. input type=file 选择图片并且实现预览效果的实例

    为大家带来一篇input type=file 选择图片并且实现预览效果的实例. 通过<input />标签,给它指定type类型为file,可提供文件上传: accept:可选择上传类型, ...

  6. input[type="file"]上传图片并显示图片

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. input type=file 选择图片并且实现预览效果

    通过<input />标签,给它指定type类型为file,可提供文件上传: accept:可选择上传类型,如:只要传图片,且不限制图片格式,为image/*: multiple:规定是否 ...

  8. input[type=file]上传图片及转为base64码以及预览

    <input type="file" id="imgurl" capture="camera" accept="image/ ...

  9. 关于PHP HTML <input type="file" name="img"/>上传图片,图片大小,宽高,后缀名。

    在我们的系统中,不免要上传图片,视频等文件,在上传中,需要做的一些判断,文件大小等方面. 注意: 在php.ini 中的post_max_size,upload_max_filesize默认为2M,在 ...

随机推荐

  1. spark学习之Lambda架构日志分析流水线

    单机运行 一.环境准备 Flume 1.6.0 Hadoop 2.6.0 Spark 1.6.0 Java version 1.8.0_73 Kafka 2.11-0.9.0.1 zookeeper ...

  2. word、ppt转换为pdf

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. dev gridview拖拽数据移动

    设置属性gridView1.OptionsSelection.EnableAppearanceFocusedCell = false; //确保选定行的背景色一样. private BindingLi ...

  4. Sublime Text 3配置浏览默认路径为localhost

    1.在 Sublime Text 3 中,安装 SideBarEnhancements 侧边栏增强插件.(注意:安装插件之前需要安装包管理工具,参考这里) 2.SideBarEnhancements ...

  5. java实现spark常用算子之ReduceByKey

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spa ...

  6. 把json1赋值给json2,修改json2的属性,json1的属性也一起变化

    let json1 = { a: 1}let json2 = json1json2.a = 5 console.log(json1.a) // 5 console.log(json2.a) // 5 ...

  7. ios上滚动不顺畅css处理方式

      overflow-y: auto; -webkit-overflow-scrolling: touch;

  8. JavaMaven【七、插件使用】

    配置pom.xml 配置在那个周期的那个阶段执行该插件的功能 上图是配置了使用插件source3.0.1,该插件的功能是打包源码 并配置了在package阶段后执行打包源码的操作jar-no-fork ...

  9. Linux(CentOS)下编译安装apache

    Centos7.6系统 已经安装lnmp一键环境 想装个apache跑php7 (php7的安装以及与apache的交互在这里: https://www.cnblogs.com/lz0925/p/11 ...

  10. java_day08_GUI

    第八章:GUI组件 1.GUI概述-AWT和Swing 图形用户界面(Graphics User Interface, GUI) 是用户与程序交互的窗口,它比基于命令行的界面更直观并且更友好. GUI ...