getCompetence() {

var _this = this

this.thisCancas = document.getElementById(‘canvasCamera‘)

this.thisContext = this.thisCancas.getContext(‘2d‘)

this.thisVideo = document.getElementById(‘videoCamera‘)

// 旧版本浏览器可能根本不支持mediaDevices,我们首先设置一个空对象

if (navigator.mediaDevices === undefined) {

navigator.mediaDevices = {}

}

// 一些浏览器实现了部分mediaDevices,我们不能只分配一个对象

// 使用getUserMedia,因为它会覆盖现有的属性。

// 这里,如果缺少getUserMedia属性,就添加它。

if (navigator.mediaDevices.getUserMedia === undefined) {

navigator.mediaDevices.getUserMedia = function(constraints) {

// 首先获取现存的getUserMedia(如果存在)

var getUserMedia =

navigator.webkitGetUserMedia ||

navigator.mozGetUserMedia ||

navigator.getUserMedia

// 有些浏览器不支持,会返回错误信息

// 保持接口一致

if (!getUserMedia) {

return Promise.reject(new Error(‘getUserMedia is not implemented in this browser‘))

}

// 否则,使用Promise将调用包装到旧的navigator.getUserMedia

return new Promise(function(resolve, reject) {

getUserMedia.call(navigator, constraints, resolve, reject)

})

}

}

var constraints = {

audio: false,

video: {

width: this.videoWidth,

height: this.videoHeight,

transform: ‘scaleX(-1)‘

}

}

navigator.mediaDevices

.getUserMedia(constraints)

.then(function(stream) {

// 旧的浏览器可能没有srcObject

if (‘srcObject‘ in _this.thisVideo) {

_this.thisVideo.srcObject = stream

} else {

// 避免在新的浏览器中使用它,因为它正在被弃用。

_this.thisVideo.src = window.URL.createObjectURL(stream)

}

_this.thisVideo.onloadedmetadata = function(e) {

_this.thisVideo.play()

}

})

.catch((err) => {

console.log(err)

})

},

//  绘制图片(拍照功能)

setImage() {

var _this = this

// 点击,canvas画图

_this.thisContext.drawImage(_this.thisVideo,0,0,_this.videoWidth,_this.videoHeight)

// 获取图片base64链接

var image = this.thisCancas.toDataURL(‘image/png‘)

_this.imgSrc = image

this.onUpload()

// _this.fileList = [{ name: ‘food.jpg‘, url: image }]

// this.$refs.upload.submit()

this.$emit(‘refreshDataList‘, this.imgSrc)

},

onUpload() {

if (this.imgSrc) {

const file = this.imgSrc // 把整个base64给file

const time = (new Date()).valueOf()// 生成时间戳

const name = time + ‘.png‘ // 定义文件名字(例如:abc.png , cover.png)

const conversions = this.dataURLtoFile(file, name) // 调用base64转图片方法

const data = new FormData()

data.append(‘file‘, conversions)

const options = {

method: ‘POST‘, // 请求方法

body: data, // 请求体

headers: this.headers

}

this.loading = true

fetch(‘http://47.99.204.99:8000/api/workerEntryExit/uploadAvatar‘, options)

.then((response) => {

return response.json()

})

.then((responseText) => {

this.fileList = [{ name: ‘人脸采集‘, url: responseText.avatar }]

this.form.issueCardPic = responseText.avatar

})

.catch((error) => {

this.loading = false

this.$notify.error({

title: ‘上传失败‘,

message: error.msg

})

})

} else {

this.$notify({

title: ‘警告‘,

message: ‘请点击拍照‘,

type: ‘warning‘

})

}

},

// base64转文件

dataURLtoFile(dataurl, filename) {

var arr = dataurl.split(‘,‘)

var mime = arr[0].match(/:(.*?);/)[1]

var bstr = atob(arr[1])

var n = bstr.length

var u8arr = new Uint8Array(n)

while (n--) {

u8arr[n] = bstr.charCodeAt(n)

}

return new File([u8arr], filename, { type: mime })

},

// 关闭摄像头

stopNavigator() {

this.thisVideo.srcObject.getTracks()[0].stop()

}

}

}

摄像头上传文件服务器失败,vue打开摄像头拍照并上传至服务器相关推荐

  1. JS打开摄像头并截图上传

    直入正题,JS打开摄像头并截图上传至后端的一个完整步骤 1. 打开摄像头主要用到getUserMedia方法,然后将获取到的媒体流置入video标签 2. 截取图片主要用到canvas绘图,使用dra ...

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

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

  3. vue 文件及描述信息一起上传_用Vue实现一个大文件上传和断点续传

    前言 这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在面试的时候确实被问到了这个问题,而且是一道在线 coding ...

  4. php上传文件失败的原因,PHP图片文件上传失败的原因

    PHP中调用move_upload_file函数时提示上传失败 form.html如下: 文件上传 文件名: upload_file.php如下: //允许上传的图片后缀 $allowedExts = ...

  5. web调用摄像头拍照并上传到服务器

    1.注意事项 1.网页对摄像头调用的限制比较高,要求网页必须https协议或者是要本地localhost(127.0.0.1)否则无法调用, 2.当你的网页协议是https请求的时候你向后端服务器发的 ...

  6. antd vue表单上传文件_AntDesign vue学习笔记-自定义文件上传

    上传文件时实际可能需要传输一个token. 方法一: 1.查看vue antdesign文档 https://vue.ant.design/components/upload-cn/ 2.使用cust ...

  7. antd 上传进度_antd vue upload组件使用customRequest上传文件显示文件上传进度

    antd-vue上传文件upload组件使用自定义上传方法customRequest无法显示文件上传进度条,如下图红框内的进度条无法显示当前文件上传进度 于是,在网上搜索解决方案: 第一种解决方案是自 ...

  8. vue实现大文件分片上传断点续传并展示上传进度条

    最近有一个上传视频到服务器的功能,然后发现视频太大了,比如1个G的视频文件基本都是上传失败的,我之前都是上传阿里云的,所以面对大文件上传服务器就做了分片上传和断点续传. 首先解释什么是分片上传:比如一 ...

  9. elementui图片上传php,vue+element-ui+富文本————图片上传

    最近用vue+element-ui开发一套后台管理系统,其中项目中需要用到富文本编辑器,这里总结下开发过程中遇到的坑和使用方法. 刚开始用的是vue-quill-editor结合element-ui上 ...

最新文章

  1. ES5 数组方法forEach
  2. Git常用命令和Git团队使用规范指南
  3. 为ActiveX制作数字签名 -- 介绍 (引)
  4. 菜鸟超级进口大仓618首度亮相!跨境商品也能当日次日达
  5. 分享一个基于jQuery,backbone.js和underscore.js的消息提示框架 - Backbone.Notifier
  6. mysql怎么禁止远程连接_mysql如何设置禁止远程连接
  7. php自动关闭页面代码,自动生成伪静态页面代码(简易版)
  8. Python3爬虫入门之Urllib库的用法
  9. 通读SLA文档之后的感受
  10. Unity全局音量控制
  11. Promise、then()、catch()详解
  12. 苹果app商品定价_苹果将调整应用商店定价:中国区应用最低价涨至8元
  13. 学前端到底哪个培训机构好?
  14. Gold的共价对接操作流程与Moe结合处理共价键的前处理流程
  15. 预测未来的神技——有趣的马尔科夫链
  16. CString的头文件
  17. Android apk签名方法介绍
  18. Ubuntu20.04设置静态IP,安装Samba服务,实现win10远程访问文件夹
  19. 承兑汇票拒付什么情况下才能追索
  20. 【404 App】v2.0版本各个渠道统计

热门文章

  1. 船舶照明行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  2. 学计算机可以玩手机吗,但就一般工作学习使用而言,是否可以把手机CPU作为电脑CPU使用?...
  3. IIS下配置跨域设置Access-Control-Allow-Origin
  4. IE和Windows系统中的彩蛋
  5. 利用机器学习的排名模型,提升你在英雄联盟的排名
  6. TypeScript 令我苦不堪言
  7. 虎牙被抬员工当事人再发声;淘宝回应网店客服“看见”用户未发送内容;Python 3.9.2 发布 | 极客头条...
  8. GitHub 年度报告正式发布,JavaScript 霸榜、TypeScript 爆发!
  9. 中国最优秀的程序员都有哪些?王兴、张小龙、张一鸣是哪类?| 蒋涛说
  10. 董明珠今晚开启抖音直播首秀;传苹果将去掉 iPhone 闪电接口;PyTorch 1.5 发布 | 极客头条...