环境条件
- 具有内置摄像头 或 外设摄像头
- Vue + Element + axios(环境不同可自行修改,本文主要为逻辑,除展示的上传控件其他与js基本无异)
全文
<template>
<div id="all">
<el-upload
:headers="{token:userinfo.token}"
class="upload-demo"
list-type="picture-card"
:multiple="false"
:limit="5"
:action="uploadimgUrl"
:on-success="uploadPhoto"
:on-remove="handleRemovePhoto"
:file-list="fileListimg"
multiple>
<i class="el-icon-plus"></i>
</el-upload>
<div class="gp">
<video ref="gpp2"></video>
</div>
<div class="footer" style="display: flex;justify-content: space-between;margin-top: 10px">
<el-button type="primary" @click="takeGpp">抓 拍 上 传</el-button>
</div>
<canvas ref="canvas" v-show="false" height="960" width="1600"></canvas>
</div>
</template>
<script>
import request from "@/utils/request";
export default {
name: "demo",
data(){
let url = process.env.VUE_APP_BASE_API;
let baseUrl = this.$baseUrl;
let userinfo = JSON.parse(sessionStorage.getItem('userinfo'))
return{
fileListimg:[],
fileliststr:"",
video:{},
baseUrl,
userinfo,
uploadimgUrl:url+"/upload_images",
}
},
mounted() {
this.initGpp();
},
methods:{
openGpp() {
// this.dialogFormVisible = true;
setTimeout(() => {
this.initGpp();
}, 100)
},
initGpp() {
this.video = this.$refs.gpp2;
console.log(this.video)
// this.video = document.getElementById('video')
//兼容性写法,判断getUserMedia方法是否存在
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || window.getUserMedia;
if (navigator.getUserMedia) {
//调用用户媒体设备, 访问摄像头
this.getUserMedia({video: {width: 1600, height: 960}}, this.success, this.error);
} else {
alert('不支持访问用户媒体');
}
},
getUserMedia(constraints, success, error) {
if (navigator.mediaDevices.getUserMedia) {
//最新的标准API
navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error);
} else if (navigator.webkitGetUserMedia) {
//webkit核心浏览器
navigator.webkitGetUserMedia(constraints, success, error)
} else if (navigator.mozGetUserMedia) {
//firfox浏览器
navigator.mozGetUserMedia(constraints, success, error);
} else if (navigator.getUserMedia) {
//旧版API
navigator.getUserMedia(constraints, succes