提交 483b0ac7 authored 作者: 王鹏飞's avatar 王鹏飞

feat: 更新视频上传逻辑,支持实验ID和用户ID的动态路径

上级 5a253d46
...@@ -3,7 +3,6 @@ import LiveCover from './LiveCover.vue' ...@@ -3,7 +3,6 @@ import LiveCover from './LiveCover.vue'
import { ElMessage, ElLoading, ElMessageBox } from 'element-plus' import { ElMessage, ElLoading, ElMessageBox } from 'element-plus'
import { useFileDialog } from '@vueuse/core' import { useFileDialog } from '@vueuse/core'
import { useUserStore } from '@/stores/user' import { useUserStore } from '@/stores/user'
import { upload } from '@/utils/upload'
import { useLive, readBlobAsBase64 } from '../composables/useLive' import { useLive, readBlobAsBase64 } from '../composables/useLive'
import { useSocket } from '@/composables/useSocket' import { useSocket } from '@/composables/useSocket'
import { saveTestRecord } from '../api' import { saveTestRecord } from '../api'
...@@ -12,7 +11,7 @@ import md5 from 'blueimp-md5' ...@@ -12,7 +11,7 @@ import md5 from 'blueimp-md5'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { useLiveChat } from '../composables/useLiveChat' import { useLiveChat } from '../composables/useLiveChat'
import { useSpeechTranscriber } from '../composables/useSpeechTranscriber' import { useSpeechTranscriber } from '../composables/useSpeechTranscriber'
import { appendUpload } from '@/utils/oss' import { appendUpload, multipartUpload } from '@/utils/oss'
import { useLiveRecord } from '../composables/useLiveRecord' import { useLiveRecord } from '../composables/useLiveRecord'
import { Check } from '@element-plus/icons-vue' import { Check } from '@element-plus/icons-vue'
...@@ -43,6 +42,7 @@ const userName = computed(() => { ...@@ -43,6 +42,7 @@ const userName = computed(() => {
}) })
const route = useRoute() const route = useRoute()
const experimentId = computed(() => String(route.query.experiment_id || ''))
const userStore = useUserStore() const userStore = useUserStore()
const ssoId = userStore.user?.id const ssoId = userStore.user?.id
...@@ -95,7 +95,7 @@ const { ...@@ -95,7 +95,7 @@ const {
if (props.isLocalUpload) return if (props.isLocalUpload) return
if (isOSSUpload) { if (isOSSUpload) {
ossResult = await appendUpload(blob, { ossResult = await appendUpload(blob, {
name: `live/${ssoId}/${fileName.value}.mp4`, name: `live/experiment_${experimentId.value}/user_${ssoId}/${fileName.value}.mp4`,
position: ossResult?.nextAppendPosition, position: ossResult?.nextAppendPosition,
}) })
fileUrl.value = ossResult.url fileUrl.value = ossResult.url
...@@ -173,8 +173,10 @@ const handleUpload = () => { ...@@ -173,8 +173,10 @@ const handleUpload = () => {
background: 'rgba(0, 0, 0, 0.7)', background: 'rgba(0, 0, 0, 0.7)',
}) })
try { try {
const res = await upload(file) const res = await multipartUpload(file, {
handleUpdateRecord({ id: recordId.value, live_video_addres: res, live_video_size: file.size.toString() }) name: `live/experiment_${experimentId.value}/user_${ssoId}/${file.name}`,
})
handleUpdateRecord({ id: recordId.value, live_video_addres: res.url, live_video_size: file.size.toString() })
ElMessage.success('上传成功') ElMessage.success('上传成功')
} catch (error) { } catch (error) {
console.error(error) console.error(error)
......
<script setup> <script setup>
import { ElMessage, ElLoading } from 'element-plus' import { ElMessage, ElLoading } from 'element-plus'
import { useFileDialog } from '@vueuse/core' import { useFileDialog } from '@vueuse/core'
import { upload } from '@/utils/upload' import { multipartUpload } from '@/utils/oss'
import { getRecordList, saveTestRecord, getRecord } from '../api' import { getRecordList, saveTestRecord, getRecord } from '../api'
import { useIntervalFn } from '@vueuse/core' import { useIntervalFn } from '@vueuse/core'
import ImprovementPlan from './ImprovementPlan.vue' import ImprovementPlan from './ImprovementPlan.vue'
const props = defineProps(['data']) const props = defineProps(['data'])
const route = useRoute()
const experimentId = computed(() => String(route.query.experiment_id || ''))
function formatDuration(seconds) { function formatDuration(seconds) {
const minutes = Math.floor(seconds / 60) const minutes = Math.floor(seconds / 60)
...@@ -83,13 +85,16 @@ const handleUpload = (row) => { ...@@ -83,13 +85,16 @@ const handleUpload = (row) => {
background: 'rgba(0, 0, 0, 0.7)', background: 'rgba(0, 0, 0, 0.7)',
}) })
try { try {
const res = await upload(file) const userId = row.current_user?.id
const res = await multipartUpload(file, {
name: `live/experiment_${experimentId.value}/user_${userId}/${file.name}`,
})
const recordRes = await getRecord({ id: row.id }) const recordRes = await getRecord({ id: row.id })
const record = recordRes.data.detail const record = recordRes.data.detail
await saveTestRecord({ await saveTestRecord({
...record, ...record,
live_practice_id: row.id, live_practice_id: row.id,
live_video_addres: res, live_video_addres: res.url,
live_video_size: file.size.toString(), live_video_size: file.size.toString(),
}) })
ElMessage.success('上传成功') ElMessage.success('上传成功')
......
Markdown 格式
0% 或
您添加了 0 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论