Files
ReelShortWeb/src/api/admin/media.ts
T

81 lines
2.2 KiB
TypeScript

// Author: fruit.com.cn
import request from '@/axios'
import type { MediaAsset, MediaTranscodeProfile } from './types'
export interface UploadInitData {
fileName: string
fileSize: number
/** DRAMA_COVER / EPISODE / AVATAR */
bizType?: string
chunkSize?: number
}
export interface UploadInitResult {
uploadId: string
chunkSize: number
totalChunks: number
objectKey: string
}
export const initUploadApi = (data: UploadInitData) => {
return request.post<UploadInitResult>({ url: '/admin/media/upload/init', data })
}
/** 不设置 Content-Type,交给浏览器带 boundary */
export const uploadChunkApi = (uploadId: string, index: number, chunk: Blob, fileName: string) => {
const form = new FormData()
form.append('uploadId', uploadId)
form.append('index', String(index))
form.append('file', chunk, fileName)
return request.post<number>({ url: '/admin/media/upload/chunk', data: form })
}
export const completeUploadApi = (uploadId: string, durationSec?: number) => {
return request.post<MediaAsset>({
url: '/admin/media/upload/complete',
data: { uploadId, durationSec }
})
}
export interface UploadProgress {
uploadId: string
fileName: string
bizType: string
fileSize: number
chunkSize: number
totalChunks: number
receivedChunks: number
percent: number
/** uploading / completed */
status: string
assetId: number
url: string
}
/** 断点续传回显:传到第几片、还剩多少(服务端说了算,客户端不自己记账) */
export const getUploadProgressApi = (uploadId: string) => {
return request.get<UploadProgress>({ url: `/admin/media/upload/${uploadId}` })
}
export const getMediaApi = (id: number) => {
return request.get<MediaAsset>({ url: `/admin/media/${id}` })
}
/** 读取当前转码档位配置;缺省时后端返回四档默认值。 */
export const getMediaTranscodeProfileApi = () => {
return request.get<MediaTranscodeProfile>({
url: '/admin/media/transcode-profile',
silent: true
})
}
/** 保存转码档位配置,并返回服务端最终生效值。 */
export const saveMediaTranscodeProfileApi = (data: MediaTranscodeProfile) => {
return request.put<MediaTranscodeProfile>({
url: '/admin/media/transcode-profile',
data,
silent: true
})
}