From bccf1e1844a5d1cb50a083e81b76e966a0733e15 Mon Sep 17 00:00:00 2001 From: bob <312777916@qq.com> Date: Fri, 11 Apr 2025 11:56:36 +0800 Subject: [PATCH] =?UTF-8?q?URL.createObjectURL=E9=9C=80=E8=A6=81=E9=87=8A?= =?UTF-8?q?=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/audio.js | 13 ++++++++++++- src/stores/document.js | 13 ++++++++++++- src/stores/image.js | 17 ++++++++++++++++- src/stores/video.js | 13 ++++++++++++- src/views/layout/LayoutContainer.vue | 19 ++++++++++++++++++- src/views/message/components/ImageMsgBox.vue | 4 ++-- 6 files changed, 72 insertions(+), 7 deletions(-) diff --git a/src/stores/audio.js b/src/stores/audio.js index d8e7310..98415c4 100644 --- a/src/stores/audio.js +++ b/src/stores/audio.js @@ -42,9 +42,20 @@ export const useAudioStore = defineStore('anylink-audio', () => { } } + const clear = () => { + Object.values(audio.value).forEach((item) => { + if (item.url.startsWith('blob:')) { + URL.revokeObjectURL(item.url) + } + }) + + audio.value = {} + } + return { audio, setAudio, - preloadAudio + preloadAudio, + clear } }) diff --git a/src/stores/document.js b/src/stores/document.js index fdcab37..2b3daee 100644 --- a/src/stores/document.js +++ b/src/stores/document.js @@ -39,9 +39,20 @@ export const useDocumentStore = defineStore('anylink-document', () => { } } + const clear = () => { + Object.values(document.value).forEach((item) => { + if (item.url.startsWith('blob:')) { + URL.revokeObjectURL(item.url) + } + }) + + document.value = {} + } + return { document, setDocument, - preloadDocument + preloadDocument, + clear } }) diff --git a/src/stores/image.js b/src/stores/image.js index b734b45..a385559 100644 --- a/src/stores/image.js +++ b/src/stores/image.js @@ -92,6 +92,20 @@ export const useImageStore = defineStore('anylink-image', () => { } } + const clear = () => { + Object.values(image.value).forEach((item) => { + if (item.originUrl.startsWith('blob:')) { + URL.revokeObjectURL(item.originUrl) + } + + if (item.thumbUrl.startsWith('blob:')) { + URL.revokeObjectURL(item.thumbUrl) + } + }) + + image.value = {} + } + return { image, imageInSession, @@ -99,6 +113,7 @@ export const useImageStore = defineStore('anylink-image', () => { setImageInSession, clearImageInSession, loadImageInfoFromContent, - preloadImage + preloadImage, + clear } }) diff --git a/src/stores/video.js b/src/stores/video.js index 9625787..de63258 100644 --- a/src/stores/video.js +++ b/src/stores/video.js @@ -39,9 +39,20 @@ export const useVideoStore = defineStore('anylink-video', () => { } } + const clear = () => { + Object.values(video.value).forEach((item) => { + if (item.url.startsWith('blob:')) { + URL.revokeObjectURL(item.url) + } + }) + + video.value = {} + } + return { video, setVideo, - preloadVideo + preloadVideo, + clear } }) diff --git a/src/views/layout/LayoutContainer.vue b/src/views/layout/LayoutContainer.vue index d292823..aa2e50c 100644 --- a/src/views/layout/LayoutContainer.vue +++ b/src/views/layout/LayoutContainer.vue @@ -8,7 +8,16 @@ import { } from '@element-plus/icons-vue' import { onMounted, onUnmounted, ref, computed } from 'vue' import ContactUs from '@/views/layout/components/ContactUs.vue' -import { useUserStore, useMessageStore, useSearchStore, useGroupStore } from '@/stores' +import { + useUserStore, + useMessageStore, + useSearchStore, + useGroupStore, + useImageStore, + useAudioStore, + useVideoStore, + useDocumentStore +} from '@/stores' import router from '@/router' import MyCard from '@/views/layout/components/MyCard.vue' import NaviMenu from '@/views/layout/components/NaviMenu.vue' @@ -34,6 +43,10 @@ const userData = useUserStore() const messageData = useMessageStore() const searchData = useSearchStore() const groupData = useGroupStore() +const imageData = useImageStore() +const audioData = useAudioStore() +const videoData = useVideoStore() +const documentData = useDocumentStore() const isShowMyCard = ref(false) const contactUsRef = ref(null) const sourceCodeRef = ref(null) @@ -87,6 +100,10 @@ onUnmounted(() => { userData.clear() messageData.clear() searchData.clear() + imageData.clear() + audioData.clear() + videoData.clear() + documentData.clear() wsConnect.closeWs() }) diff --git a/src/views/message/components/ImageMsgBox.vue b/src/views/message/components/ImageMsgBox.vue index 8974e2e..96debfd 100644 --- a/src/views/message/components/ImageMsgBox.vue +++ b/src/views/message/components/ImageMsgBox.vue @@ -50,11 +50,11 @@ const initialIndex = computed(() => { }) const fileName = computed(() => { - return props.isForMix ? '' : imageData.image[props.imgId].fileName + return props.isForMix ? '' : imageData.image[props.imgId]?.fileName }) const size = computed(() => { - return props.isForMix ? '' : imageData.image[props.imgId].size + return props.isForMix ? '' : imageData.image[props.imgId]?.size }) const formatSize = computed(() => {