123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- import SparkMD5 from "spark-md5"
- import { ElMessage } from 'element-plus'
- export default {
- /* 时间格式化 */
- formatTime(timestamp, fmt = 'yyyy-MM-dd hh:mm:ss') {
- let d = new Date()
- d.setTime(timestamp)
- var o = {
- 'M+': d.getMonth() + 1, //月份
- 'd+': d.getDate(), //日
- 'h+': d.getHours(), //小时
- 'm+': d.getMinutes(), //分
- 's+': d.getSeconds(), //秒
- 'q+': Math.floor((d.getMonth() + 3) / 3), //季度
- 'S': d.getMilliseconds() //毫秒
- }
- if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length))
- for (var k in o)
- if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((
- '00' + o[
- k]).substr(('' + o[k]).length)))
- return fmt
- },
- /* 获取视频文件的持续时长 */
- getVideoDuration(file, url) {
- return new Promise((resolve, reject) => {
- console.log('ferhth', file);
- var vid = document.createElement('video');
- var fileURL = url || window.URL.createObjectURL(file);
- vid.src = fileURL;
- vid.addEventListener('loadedmetadata', function () {
- resolve(vid.duration);
- });
- vid.remove()
- })
- },
- /* 将文件MD5 Uint8Array格式转换成字符串 */
- convertFileMD5ToString(fileData) {
- var dataString = "";
- for (var i = 0; i < fileData.length; i++) {
- dataString += fileData[i].toString(16);
- }
- return dataString
- },
- /* 获取文件的MD5 */
- getFileMD5(file) {
- return new Promise((resolve, reject) => {
- const CHUNK_SIZE = 4194304
- const fileReader = new FileReader()
- const chunkFile = file.slice(0, CHUNK_SIZE)
- fileReader.readAsBinaryString(chunkFile)
- let spark = new SparkMD5()
- fileReader.onload = e => {
- spark.appendBinary(e.target.result)
- var md5 = spark.end(true)
- resolve(this.stringToUint8Array(md5))
- }
- })
- },
-
- /* 检查音视频格式是否符合格式要求 */
- checkMediaFile(file) {
- return new Promise((r, j) => {
- const getSize = () => file.size
- const readChunk = (chunkSize, offset) => new Promise((resolve, reject) => {
- const reader = new FileReader()
- reader.onload = (event) => {
- if (event.target.error) {
- reject(event.target.error)
- }
- resolve(new Uint8Array(event.target.result))
- }
- reader.readAsArrayBuffer(file.slice(offset, offset + chunkSize))
- })
- window.MediaInfo().then((media) => {
- media.analyzeData(getSize, readChunk).then((result) => {
- console.log(result)
- if (result['media']) {
- let tracks = result['media']['track']
- // 判断是否是视频
- let videoTrack = tracks.find(track => track['@type'] === 'Video')
- let audioTrack = tracks.find(track => track['@type'] === 'Audio')
- // 如果视频文件满足MP4(H264+AAC),WAV('vp8','vp9') 则代表是可以正常播放的视频文件,返回视频的编码级别
- if (videoTrack && audioTrack) {
- let videoFormat = videoTrack.Format.toLowerCase()
- let audioFormat = audioTrack.Format.toLowerCase()
- if ((videoFormat === 'avc' && audioFormat === 'aac') || (['vp8', 'vp9'].includes(videoFormat) && audioFormat === 'vorbis')) {
- r(videoTrack.Format_Profile || true)
- } else {
- r(false)
- }
- }
- // 如果是只有视频轨没有音频轨(PPT直接转视频)
- else if (videoTrack && !audioTrack) {
- let videoFormat = videoTrack.Format.toLowerCase()
- if (videoFormat === 'avc') {
- ElMessage({
- type: 'warning',
- message: '视频文件未检测到音频轨,建议您调整后重新上传'
- })
- r(true)
- } else {
- r(false)
- }
- }
- // 如果是音频文件则需要满足 mp3(MPEG Audio),ogg(Vorbis),wav(PCM) 任意一种编码格式
- else if (!videoTrack && audioTrack && ['mpeg audio', 'vorbis', 'pcm'].includes(audioTrack.Format.toLowerCase())) {
- r(true)
- } else {
- r(false)
- }
- } else {
- r(false)
- }
- }).catch((error) => {
- console.log('error', error);
- j(error)
- })
- }).catch((error) => {
- console.log('error', error);
- j(error)
- })
- })
- },
- /* 将二进制流字符串转换成Uint8Array */
- stringToUint8Array(str) {
- var arr = [];
- for (var i = 0, j = str.length; i < j; ++i) {
- arr.push(str.charCodeAt(i));
- }
- var tmpUint8Array = new Uint8Array(arr);
- return tmpUint8Array
- },
- /* 根据地址获取blobHOST域名 */
- getBlobHost(url) {
- let s = url
- let pattern = /[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/
- return s.split('//')[0] + '//' + s.match(pattern)[0]
- },
- /* 获取文件后缀名 */
- getSuffix(name) {
- return name.substr(name.lastIndexOf(".") + 1)
- },
- getFileThum(type, fileName) {
- const docType = ['doc', 'docx']
- const excelType = ['xls', 'csv', 'xlsx']
- const pptType = ['ppt', 'pptx']
- let thumPath = ''
- if (type === 'doc' && docType.includes(this.getSuffix(fileName))) {
- thumPath = require('@/assets/source/word.png')
- } else if (type === 'doc' && excelType.includes(this.getSuffix(fileName))) {
- thumPath = require('@/assets/source/excel.png')
- } else if (type === 'doc' && pptType.includes(this.getSuffix(fileName))) {
- thumPath = require('@/assets/source/ppt.png')
- } else if (type === 'image') {
- thumPath = require('@/assets/source/image.png')
- } else if (type === 'video') {
- thumPath = require('@/assets/source/video.png')
- } else if (type === 'audio') {
- thumPath = require('@/assets/source/audio.png')
- } else if (type === 'link') {
- thumPath = require('@/assets/source/link.png')
- } else if (type === 'res') {
- thumPath = require('@/assets/source/zip.png')
- } else if (type === 'thum') {
- thumPath = require('@/assets/source/image.png')
- } else {
- thumPath = require('@/assets/source/link.png')
- }
- return thumPath
- },
- /* 弹窗下载文件操作 */
- doDownloadByUrl(url, fileName) {
- let a = document.createElement('a');
- a.href = url;
- a.download = fileName;
- a.target = '_blank'
- a.click()
- a.remove();
- },
- }
|