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. Hinton等人新研究:如何更好地测量神经网络表示相似性

    Hinton等人新研究:如何更好地测量神经网络表示相似性 2019年05月22日 08:39:15 喜欢打酱油的老鸟 阅读数 177更多 分类专栏: 人工智能   https://www.toutia ...

  2. 树莓派和STM32通过USB和串口通信记录

    不管怎样,为了简便开发,通信选择串口通信. 推荐文章:https://blog.csdn.net/magnetoooo/article/details/53564797 推荐测试工具:https:// ...

  3. 开发工具idea

    https://blog.csdn.net/mashuai720/article/details/79389314

  4. Windows 7 系统下显示文件类型的扩展名和隐藏文件

    一.显示扩展名 点击开始菜单 在搜索框中输入「文件夹选项」并单击 切换到「查看」栏,取消勾选「隐藏已知文件类型的扩展名」这一项 设置完成 ps: 你也可以通过单击下图位置进行相应操作来达到同样的效果 ...

  5. 批量转换epub书籍为mobi电子书

    kindlegen下载地址: http://kindlegen.s3.amazonaws.com/kindlegen_win32_v2_9.zip 原文: http://blog.sina.com.c ...

  6. https://bbs.ichunqiu.com/thread-48915-1-1.html

    使用BurpSuite进行双文件上传拿Webshell 首先进入网站后台:(后台界面应该是良精CMS) <ignore_js_op> 在 添加产品 这一栏有个上传文件: <ignor ...

  7. centos7andcentos6初始化脚本

    #!/bin/bash # get OS verison RELEASEVER=$(rpm -q --qf "%{Version}" $(rpm -q --whatprovides ...

  8. 制作CentOS8安装U盘时遇到的“Minimal BASH-like...”问题

    ---恢复内容开始--- CentOS8已经推出了,正好最近新到了块服务器硬盘需要安装系统,就拿过来尝一下鲜. 下载好iso文件后,以制作CentOS7安装盘相同的步骤,用UltroISO(软碟通)往 ...

  9. 2.Java NIO 简介

    概述 Java NIO 是 JDK 1.4 发布的一套全新的IO API(New IO 简称 NIO),由于 JDK 1.7 对 NIO 的更新,目前 NIO 被广泛应用,以至于 将 JDK 1.7 ...

  10. Centos7 更改网卡名称

    cd /etc/sysconfig/network-scripts/ 将要改名的网卡配置文件重命名,例如 mv ifcfg-eth1 ifcfg-eth0 vim ifcfg-eth0 修改devic ...