公司最近在做一个h5嵌入原生的项目,其中有一个需求是在没有和原生交互的前提下,调用调用手机相机进行拍照,然后将照片上传后端。

之前没接触过类似的需求,然后就感觉要调用移动端的硬件设备很是高大上;现在项目做完了复盘一看,发现其实不难,固定的方法固定的格式,然后结果就出来了。特此整理一篇文章,希望小伙伴能够少走坑。

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

属性:

  • FileReader.error 表示在读取文件时发生的错误
  • FileReader.readyState
  • FilerReader.result 读取到的结果

下面开始实际例子

index.html如下

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>FileReader</title>
</head>
<body><input id="input" type="file">
</body>
</html>

demo.txt如下

this is a demo test
hello world

读取txt文件

<script>const input = document.querySelector('input[type=file]')input.addEventListener('change', ()=>{const reader = new FileReader()reader.readAsText(input.files[0],'utf8') // input.files[0]为第一个文件reader.onload = ()=>{document.body.innerHTML += reader.result  // reader.result为获取结果}}, false)</script>

读取图片文件

<script>const input = document.querySelector('input[type=file]')input.addEventListener('change', ()=>{console.log( input.files )const reader = new FileReader()reader.readAsDataURL(input.files[0]) // input.files[0]为第一个文件reader.onload = ()=>{const img = new Image()img.src = reader.resultdocument.body.appendChild(img)  // reader.result为获取结果}}, false)</script>

图片上传(FormData)

ps:

ajax必须设置这两个属性为false,否则上传会失败

contentType: false, //不设置Content-Type请求头

processData: false,

var formdata = new FormData();
// 此处设置上传图片所需携带的参数,若有多个参数就写多个append即可
formdata.append('params1', 'aaa');
formdata.append('params2', 'bbb');
formdata.append('file', input.files[0]);
$.ajax({type: "POST",url: url,data: formdata,dataType: "json",contentType: false, //不设置Content-Type请求头processData: false,success: function(res) {},error: function(err) {}
});

如果有多张图片上传,可以配合Promise.all属性进行异步管理

本文参考了文章:https://www.jianshu.com/p/42fd93f08554

FileReader()读取文件,h5调用原生相机拍照,FormData()上传服务器相关推荐

  1. 微信小程序-从相册获取图片,视频 使用相机拍照,录像上传+服务器(nodejs版)接收

    在本文 微信小程序-从相册获取图片 使用相机拍照 本地图片上传之前需要看看 微信小程序-获取用户session_key,openid,unionid - 后端为nodejs 代码封装是在上文添加的. ...

  2. 微信小程录制视频上传服务器,微信小程序-从相册获取图片,视频使用相机拍照,录像上传+服务器nodejs版接收-微信小程序视频上传功能-微信小程序视频上传...

    在本文微信小程序-从相册获取图片使用相机拍照本地图片上传之前需要看看微信小程序-获取用户session_key,openid,unionid-后端为nodejs代码封装是在上文添加的.本文知识点:1. ...

  3. 安卓调用系统相机录像并上传到后端服务器

    安卓调用系统相机录像并上传到后端服务器 写在前面 一.录像上传的思路 二.添加相关权限 三.按钮设置监听,调用相机录像并回调 1.按钮设置监听: 2.调用代码 3.回调代码(划重点奥) 最后的最后: ...

  4. 微信公众号H5开发——调用相册和摄像头并上传服务器

    之前的文章介绍了关于微信JSSDK调用,下面介绍一下其中的一个最常用的功能--调用相册和摄像头 使用此功能之前先参考:微信JSSDK 在通过了config接口验签成功之后,我们就可以调用微信JSSDK ...

  5. 摄像头网页服务器,js调用本地摄像头拍照并上传到web服务器

    [实例简介] js调用本地摄像头拍照并上传到web服务器.后台使用java实现图片的接收和存储,上传的图片默认保存到项目下的images文件夹中. [实例截图] [核心代码] MyCamera └── ...

  6. android 实现自动拍照,android 调用摄像头自动拍照 并上传到YEELINK

    前几天看到yeelink这个网站很感兴趣,注册了个图像传感器,就想着写个程序调用安卓摄像头并上传照片 程序很简单这个还是记录一下 首先是权限,分别是联网,相机,文件读取,照相和自动对焦的权限 然后是代 ...

  7. HTML5调用本地摄像头画面,拍照,上传服务器

    实现功能和适用业务 采集本地摄像头获取摄像头画面,拍照保存,上传服务器: 前端上传图片处理,展示,缩小,裁剪,上传服务器 实现步骤 调取本地摄像头(getUserMedia)/上传图片,将图片/视频显 ...

  8. H5移动端原生JS封装附件上传服务器

    本文主要通过原生的js封装附件上传upload.js.可成功内嵌钉钉,ios和安卓端可正常使用,支持单个.多个附件上传. 一.业务需求 封装原生JS附件上传,动态创建附件列表,可对附件列表进行删除和新 ...

  9. 使用SurfaceView实现手机息屏状态下的静默拍照保存,上传服务器

    注意:本文章只适用于技术交流,请你友好交流净化开发环境 思考 由于谷歌强制在Android应用开发中编写拍照程序是必需要有图像预览的.这对那些恶意程序比如Android中泛滥的Service在后台偷偷 ...

最新文章

  1. JDBC连接mysql数据的7个步骤(讲解+源码)
  2. 算法分析赛:从数据中挖掘价值,72万奖金,DCIC 2020 大数据赛道来了!
  3. (chap3 数据链路)MAC地址
  4. CodeBlocks 20.03 配置 wxWidgets 3.1.4
  5. C#使用读写锁三行代码简单解决多线程并发写入文件时线程同步的问题
  6. anaconda python_机器学习用Python—Python集成工具包Anaconda安装步骤
  7. Android Studio开发环境搭建准备
  8. 走进缓存的世界(一) - 开篇
  9. [转]CentOS6.4下Mysql数据库的安装与配置
  10. [转] Float或Double浮点型计算精度问题的解决方法
  11. DE16 Continuation: More General Periods
  12. dell 虚拟linux,戴尔:Linux是轻松构建虚拟主机的关键
  13. 原来体检报告是这么看的,赶紧收藏!
  14. repeater没有数据显示暂无数据,无记录
  15. Atitit 持久化 Persistence概念的艺术 目录 1. 持久化是将程序数据在持久状态和瞬时状态间转换的机制。 1 2. DBC就是一种持久化机制。文件IO也是一种持久化机制。 2 3.
  16. 1481c语言合法标识符,c语言试题答案集
  17. java 过滤微信昵称_java过滤微信昵称特殊字符
  18. SpringBoot 实现发送邮件
  19. CentOS 安装Oracle 11g R2
  20. 集团化企业的电子印章管理模式

热门文章

  1. python路径转换为选区快捷键_自由变化选区的快捷键是( )
  2. 特征筛选利器:Boruta 原理
  3. oracle10g安装卸载,Oracle10G的silent(静默)安装、升级和卸载
  4. 【深度学习】迁移学习 (Transfer Learning)
  5. Vue.js 应用性能优化,给你专业的分析+解决方案
  6. java遍历List数据的三种写法
  7. 基于Nodejs的智慧小区服务系统的设计和实现
  8. 阿里巴巴技术专家在线授课——Java 微服务实践
  9. 许嵩安徽蚌埠安徽财经大学歌友会
  10. 数据恢复extundelete安装及简单使用