import request from '../../utils/request'
|
import axios from 'axios'
|
import Cookies from 'js-cookie'
|
|
export function fetchList (data) {
|
return request.post('/visitsAdmin/cloudService/business/collectionStation/media/page', data, { trim: true })
|
}
|
|
/** 预览接口 URL */
|
export function buildPreviewUrl (id) {
|
const token = Cookies.get('dm_user_token') || ''
|
const base = process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/business/collectionStation/media/preview/' + id
|
return token ? `${base}?dm_user_token=${encodeURIComponent(token)}` : base
|
}
|
|
/** 下载到本地接口 URL */
|
export function buildDownloadUrl (id) {
|
const token = Cookies.get('dm_user_token') || ''
|
const base = process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/business/collectionStation/media/download/' + id
|
return token ? `${base}?dm_user_token=${encodeURIComponent(token)}` : base
|
}
|
|
function authHeaders () {
|
const token = Cookies.get('dm_user_token')
|
return token ? { dm_user_token: token } : {}
|
}
|
|
function rejectBlobError (blob) {
|
if (!blob || blob.size === 0) {
|
return Promise.reject(new Error('文件为空'))
|
}
|
if (blob.type && blob.type.includes('json')) {
|
return blob.text().then(text => {
|
let message = '操作失败'
|
try {
|
const json = JSON.parse(text)
|
message = json.message || message
|
} catch (e) {
|
message = text || message
|
}
|
return Promise.reject(new Error(message))
|
})
|
}
|
return Promise.resolve(blob)
|
}
|
|
/** 预览接口拉取文本(txt/log) */
|
export function fetchPreviewText (id) {
|
return axios({
|
url: buildPreviewUrl(id),
|
method: 'get',
|
responseType: 'text',
|
headers: authHeaders()
|
}).then(res => {
|
const data = res.data
|
if (typeof data === 'string' && data.trim().startsWith('{') && data.includes('"success"')) {
|
try {
|
const json = JSON.parse(data)
|
if (json.success === false) {
|
return Promise.reject(new Error(json.message || '预览失败'))
|
}
|
} catch (e) {
|
// 非 JSON 响应,按文本展示
|
}
|
}
|
return data || ''
|
})
|
}
|
|
export function fetchPreviewBlob (id) {
|
return axios({
|
url: buildPreviewUrl(id),
|
method: 'get',
|
responseType: 'blob',
|
headers: authHeaders()
|
}).then(res => rejectBlobError(res.data))
|
}
|
|
/** 下载已入库媒体到本地 */
|
export function fetchMediaFile (id) {
|
return axios({
|
url: buildDownloadUrl(id),
|
method: 'get',
|
responseType: 'blob',
|
headers: authHeaders()
|
}).then(res => {
|
if (res.headers['content-type'] === 'application/json') {
|
return rejectBlobError(res.data).then(() => res)
|
}
|
return res
|
})
|
}
|
|
/** 校验 Blob 是否为 MP4 容器 */
|
export function ensureMp4Blob (blob) {
|
return blob.slice(0, 12).arrayBuffer().then(buf => {
|
const arr = new Uint8Array(buf)
|
const isMp4 = arr.length >= 8 && arr[4] === 0x66 && arr[5] === 0x74 && arr[6] === 0x79 && arr[7] === 0x70
|
if (!isMp4) {
|
return Promise.reject(new Error('文件不是有效的 MP4 格式,请重新下载该媒体'))
|
}
|
return new Blob([blob], { type: 'video/mp4' })
|
})
|
}
|