// 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({ 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({ url: '/admin/media/upload/chunk', data: form }) } export const completeUploadApi = (uploadId: string, durationSec?: number) => { return request.post({ 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({ url: `/admin/media/upload/${uploadId}` }) } export const getMediaApi = (id: number) => { return request.get({ url: `/admin/media/${id}` }) } /** 读取当前转码档位配置;缺省时后端返回四档默认值。 */ export const getMediaTranscodeProfileApi = () => { return request.get({ url: '/admin/media/transcode-profile', silent: true }) } /** 保存转码档位配置,并返回服务端最终生效值。 */ export const saveMediaTranscodeProfileApi = (data: MediaTranscodeProfile) => { return request.put({ url: '/admin/media/transcode-profile', data, silent: true }) }