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. 黑白世界,感受不同的旅行...
  2. c语言源程序结构是怎样的?
  3. json 取值判断_对应后台传json ajax 获取值判断
  4. getgrgid()函数
  5. caffe linux下面的调试mnist遇到的问题
  6. 吉林大学校园网linux客户端,吉林大学校园网认证客户端 v5.2.1 pc版
  7. [CM311-1A]-全网最全 Android 用户管理及用户应用权限
  8. recv函数linux,linux 下调用recv函数,死循环在recv函数里面,什么原因?
  9. 微信小程序-历史搜索记录保存与清空
  10. 如何将已有图片做成透明水印_如何给图片制作透明水印
  11. H5 在iPhone真机上调试H5页面
  12. 动辄上亿损失,网络安全谁来买单?
  13. tree traversal (树的遍历) - inorder traversal (中序遍历)
  14. 接口加密(TokenSpringCloud项目中进行token认证)
  15. 【刷题】求长方形与正方形的个数
  16. 包装类的自动装箱,自动拆箱
  17. 如何查看oracle的版本信息(两种方法)
  18. 为什么独热编码会引起维度诅咒,以及避免他的几个办法
  19. 1 W 字 | 硬刚 MySQL
  20. Django2.0官方文档--概览

热门文章

  1. 2021年中国一次性卫生设备市场趋势报告、技术动态创新及2027年市场预测
  2. 等级VIN行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  3. android获取sd的大小,Android实现获取SD卡总容量,可用大小,机身内存总容量及可用大小的方法...
  4. eclipse配置glassfish、将一个WEB项目部署到glassfigh
  5. 低代码平台会成为企业数字化基础设施么?
  6. AI迎来重要发展契机,开发者的机会在哪里?
  7. Serverless 的前世今生
  8. 面对新型肺炎疫情,AI 能做什么?
  9. 2019 最烂密码排行榜大曝光!网友:已中招!
  10. 5G手机江湖:一场卡位战,一位“关键先生”,一个“王者”