askbot-dragon 0.7.17 → 0.7.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "askbot-dragon",
3
- "version": "0.7.17",
3
+ "version": "0.7.21",
4
4
  "scripts": {
5
5
  "serve": "vue-cli-service serve",
6
6
  "build": "vue-cli-service build",
Binary file
@@ -0,0 +1,92 @@
1
+
2
+
3
+ const OSS = require('ali-oss');
4
+
5
+ const ossConfig={
6
+ region: "oss-cn-zhangjiakou",
7
+ //云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用STS方式来进行API访问
8
+ accessKeyId: "LTAI4G3QtdEdwkEbihBngAsK",
9
+ accessKeySecret: "OwgdVfc5PeCkIgqIdug660xmiSPchn",
10
+ // stsToken: '<Your securityToken(STS)>',
11
+ bucket: "guoranopen-zjk",
12
+ };
13
+
14
+ let IDX = 256, HEX = [], SIZE = 256, BUFFER;
15
+ while (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);
16
+
17
+ function uid(len) {
18
+ let i = 0, tmp = (len || 11);
19
+ if (!BUFFER || ((IDX + tmp) > SIZE * 2)) {
20
+ for (BUFFER = '', IDX = 0; i < SIZE; i++) {
21
+ BUFFER += HEX[Math.random() * 256 | 0];
22
+ }
23
+ }
24
+
25
+ return BUFFER.substring(IDX, IDX++ + tmp);
26
+ }
27
+
28
+ function dataFormat(fmt, date = new Date()) {
29
+ const o = {
30
+ "M+": date.getMonth() + 1, //月份
31
+ "d+": date.getDate(), //日
32
+ "h+": date.getHours(), //小时
33
+ "m+": date.getMinutes(), //分
34
+ "s+": date.getSeconds(), //秒
35
+ "q+": Math.floor((date.getMonth() + 3) / 3), //季度
36
+ "S": date.getMilliseconds() //毫秒
37
+ };
38
+ if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
39
+ for (const k in o)
40
+ if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
41
+ return fmt;
42
+ }
43
+
44
+ function pathGenerate(filename) {
45
+ return "front-oss/" + dataFormat("yyyy/MM/dd/hh/mm/") + uid(32) + "/" + filename;
46
+ }
47
+
48
+
49
+ async function upload(ossConfig, data) {
50
+ let ossClient = new OSS(ossConfig);
51
+ // object-key可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
52
+ let objectKey = pathGenerate(data.name);
53
+ let result = await ossClient.put(objectKey, data);
54
+ console.debug(result);
55
+ return result;
56
+ }
57
+
58
+ async function multipartUpload(ossConfig, data, callback,extCallback) {
59
+ let ossClient = new OSS(ossConfig);
60
+ // object-key可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
61
+ let objectKey = pathGenerate(data.name);
62
+ let res = await ossClient.multipartUpload(objectKey, data, {
63
+ progress: function (p, checkpoint) {
64
+ console.debug('progress callback', p, checkpoint);
65
+ // 断点记录点。浏览器重启后无法直接继续上传,您需要手动触发上传操作。
66
+ if (callback && callback instanceof Function) {
67
+ callback(p, checkpoint,data,extCallback);
68
+ }
69
+ }
70
+ });
71
+ return res;
72
+ }
73
+
74
+ function ossFileUrl(ossConfig, path, cname) {
75
+ if (cname == null) {
76
+ return '//' + ossConfig.bucket + '.' + ossConfig.region + '.aliyuncs.com/' + path;
77
+ } else {
78
+ return cname + '/' + path;
79
+ }
80
+ }
81
+
82
+ function uploadImageByBase64(ossConfig,blob) {
83
+ let ossClient = new OSS(ossConfig);
84
+
85
+ // object-key可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
86
+ let objectKey = pathGenerate(new Date().getTime());
87
+ let result = ossClient.put(objectKey, blob);
88
+ console.debug(result);
89
+ return result;
90
+ }
91
+
92
+ export {upload, multipartUpload, ossFileUrl,uploadImageByBase64,ossConfig}
@@ -0,0 +1,22 @@
1
+ function base64toBlob(b64Data, contentType='', sliceSize=512) {
2
+ const byteCharacters = atob(b64Data);
3
+ const byteArrays = [];
4
+
5
+ for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
6
+ const slice = byteCharacters.slice(offset, offset + sliceSize);
7
+
8
+ const byteNumbers = new Array(slice.length);
9
+ for (let i = 0; i < slice.length; i++) {
10
+ byteNumbers[i] = slice.charCodeAt(i);
11
+ }
12
+
13
+ const byteArray = new Uint8Array(byteNumbers);
14
+
15
+ byteArrays.push(byteArray);
16
+ }
17
+
18
+ const blob = new Blob(byteArrays, {type: contentType});
19
+ return blob;
20
+ }
21
+
22
+ export {base64toBlob}
@@ -1,7 +1,9 @@
1
1
  <template>
2
2
  <div
3
3
  v-loading="loading"
4
- :element-loading-text="showProgress">
4
+ :element-loading-text="showProgress"
5
+ id="dragon-video"
6
+ >
5
7
  <!-- <video-player
6
8
  class="video-player vjs-custom-skin"
7
9
  x5-video-player-type="h5"
@@ -12,21 +14,24 @@
12
14
  controls="controls"
13
15
  :raw-controls="true"
14
16
  x5-video-player-type="h5-page"
15
- style="object-fit: contain;width: calc(100vw - 139px);height: 160px;background-color: black;border-radius: 25px;max-width: 230px;padding: 0 10px"
17
+ style="object-fit: contain;width: calc(100vw - 139px);height: 160px;background-color: black;border-radius: 25px;max-width: 230px;padding-left: 10px"
18
+ :poster="poster"
16
19
  class="video-player vjs-custom-skin"
17
20
  :id="msg.keyId+'key'">
18
- <source :src="videoSrc" />
21
+ <source :src="videoSrc"/>
19
22
  </video>
20
- <div id="output"></div>
21
23
  </div>
22
24
  </template>
23
25
  <script>
26
+ import {ossConfig,uploadImageByBase64} from "../assets/js/AliyunlssUtil";
27
+
24
28
  export default {
25
29
  name: "ask_video",
26
30
  props: ["msg", "url", "localUrl", "progress"],
27
31
  data() {
28
32
  return {
29
- videoSrc:''
33
+ videoSrc:'',
34
+ poster:''
30
35
  }
31
36
  },
32
37
  watch: {
@@ -45,14 +50,78 @@
45
50
  mounted() {
46
51
  this.$nextTick(()=>{
47
52
  this.videoSrc = this.url ? this.url : this.localUrl
53
+ this.getImage()
54
+
48
55
  })
49
56
 
50
57
  },
51
58
  methods:{
59
+ getImage(){
60
+ let that = this
61
+ var video;
62
+ var scale = 0.8;
63
+
64
+ var initialize = function() {
65
+ let id = that.msg.keyId+'key'
66
+ video = document.getElementById(id);
67
+ video.addEventListener('loadeddata',captureImage);
68
+ };
69
+
70
+ var captureImage = function() {
71
+ var canvas = document.createElement("canvas");
72
+ canvas.width = video.videoWidth * scale;
73
+ canvas.height = video.videoHeight * scale;
74
+ canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
75
+ /*var img = document.createElement("img");
76
+ img.crossOrigin = 'anonymous'*/
77
+ /*img.src = canvas.toDataURL("image/png");*/
78
+ let base64 = canvas.toDataURL("image/png")
79
+ let blob = that.dataURLtoFile(base64,'name')
80
+ let promise = uploadImageByBase64(ossConfig,blob);
81
+ promise.then((res)=>{
82
+ console.debug("upload base64 reslut",res);
83
+ if (res&&res.url){
84
+ that.poster = res.url
85
+ }
86
+ });
87
+ /*output.appendChild(img);*/
88
+ };
89
+
90
+ initialize();
91
+ },
92
+ dataURLtoFile(dataurl, filename) {
93
+ var arr = dataurl.split(',');
94
+ var mime = arr[0].match(/:(.*?);/)[1];
95
+ var bstr = atob(arr[1]);
96
+ var n = bstr.length;
97
+ var u8arr = new Uint8Array(n);
98
+ while(n--){
99
+ u8arr[n] = bstr.charCodeAt(n);
100
+ }
101
+ //转换成file对象
102
+ return new File([u8arr], filename, {type:mime});
103
+ //转换成成blob对象
104
+ /*return new Blob([u8arr],{type:'image/png'});*/
105
+ }
52
106
  }
53
107
 
54
108
  }
55
109
  </script>
56
110
  <style scoped lang="less">
111
+ video::-webkit-media-controls-mute-button { display: none !important;}
112
+ #dragon-video{
113
+ position: relative;
114
+ #outputVideo{
115
+ position: absolute;
116
+ top: 0px;
117
+ /deep/img{
118
+ width: calc(100vw - 139px);
119
+ border-radius: 25px;
120
+ max-width: 230px;
121
+ height: 160px;
122
+ }
123
+
124
+ }
125
+ }
57
126
 
58
127
  </style>