diff --git a/packages/vant/src/uploader/Uploader.tsx b/packages/vant/src/uploader/Uploader.tsx index d0f6caa02..1f5884c4e 100644 --- a/packages/vant/src/uploader/Uploader.tsx +++ b/packages/vant/src/uploader/Uploader.tsx @@ -4,6 +4,7 @@ import { PropType, defineComponent, ExtractPropTypes, + onBeforeUnmount, } from 'vue'; // Utils @@ -97,6 +98,7 @@ export default defineComponent({ setup(props, { emit, slots }) { const inputRef = ref(); + const urls: string[] = []; const getDetail = (index = props.modelValue.length) => ({ name: props.name, @@ -225,7 +227,13 @@ export default defineComponent({ if (props.previewFullImage) { const imageFiles = props.modelValue.filter(isImageFile); const images = imageFiles - .map((item) => item.content || item.url) + .map((item) => { + if (item.file && !item.url) { + item.url = URL.createObjectURL(item.file); + urls.push(item.url); + } + return item.url; + }) .filter(Boolean) as string[]; imagePreview = ImagePreview( @@ -338,6 +346,10 @@ export default defineComponent({ } }; + onBeforeUnmount(() => { + urls.forEach((url) => URL.revokeObjectURL(url)); + }); + useExpose({ chooseFile, closeImagePreview,