更新时间: 2025-01-27
版本: v1.1.0
修复类型: Bug修复
本次修复解决了ImageUpload组件中新上传文件图片不显示的问题,特别是修复了通过OSS ID获取图片的关键机制,确保新上传的文件能够与历史文件一样正常显示。
// 新上传文件异步加载处理 - 优先使用OSS ID
const loadPromises = newUploadedFiles.map((item, index) => {
return (async () => {
try {
let blobUrl = '';
if (item.ossId) {
// 🔴 关键修复:通过OSS ID获取预览URL
blobUrl = await getPreviewUrlByOssId(item.ossId);
} else if (item.url) {
// 降级处理:直接URL
blobUrl = await getPreviewImageBlobUrl(item.url);
}
// 更新文件列表
updateFileList(item, blobUrl);
} catch (error) {
// 降级处理:重新通过OSS ID获取
fallbackToOssId(item);
}
})();
});
// 占位符项目创建
const placeholderItems = newUploadedFiles.map((item, index) => ({
name: item.name,
url: 'data:image/svg+xml;base64,...', // 加载中占位图片
originalUrl: item.url,
ossId: item.ossId,
isLoaded: false,
isPlaceholder: true
}));
// 服务器返回的数据结构
{
code: 200,
data: {
url: "http://example.com/file.jpg", // 文件URL
fileName: "test.jpg", // 文件名
ossId: "1951584287279034370" // 🔴 关键:OSS ID
}
}
// 1. 接收上传响应
const uploadItem = {
name: res.data.fileName,
url: res.data.url,
ossId: res.data.ossId // 🔴 保存OSS ID
};
// 2. 通过OSS ID获取文件信息
const ossList = await listByIds(ossId);
// 3. 获取认证的blob URL
const blobUrl = await getPreviewImageBlobUrl(ossList[0].url);
// 4. 更新文件列表显示
fileList[index].url = blobUrl;
<template>
<ImageUpload v-model="form.images" :limit="5" />
</template>
<script setup>
import { ref } from 'vue';
import ImageUpload from '@/components/ImageUpload/index.vue';
const form = ref({
images: ''
});
</script>
<template>
<ImageUpload
v-model="form.images"
:limit="10"
:file-size="5"
:file-type="['png', 'jpg', 'jpeg']"
:compress-support="true"
:compress-target-size="300"
/>
</template>
使用测试页面验证功能:web/src/views/demo/ImageUploadTest.vue
组件会在控制台输出详细的调试信息:
handleUploadSuccess:res {code: 200, data: {...}}
handleUploadSuccess:file File {...}
添加上传项到uploadList: {name: "test.jpg", url: "...", ossId: "123"}
uploadedSuccessfully called, number: 1, uploadList length: 1
开始处理新上传的文件: [...]
通过OSS ID获取预览URL for 123
获取到的blob URL for 123: blob:http://...
成功更新文件 123
通过OSS ID获取预览URL for 1951584287279034370
loadFileImageAsync: 通过OSS ID获取预览URL for 1951584287279034370
降级处理:重新通过OSS ID获取 1951584287279034370
A: 检查控制台是否有错误信息,确认网络连接正常,OSS服务可用。特别检查OSS ID获取相关的日志。
A: 这是正常的,因为需要经过OSS ID获取和认证的blob URL转换。可以通过网络优化或CDN加速改善。
A: 可能是权限问题或文件损坏,检查OSS文件是否正常,权限是否正确。确认是否通过OSS ID正确获取。
A: 目前不支持禁用,异步加载和OSS ID获取是必需的认证机制。如需优化,可以考虑缓存策略。
A: OSS ID获取机制确保:
如遇到问题,请:
注意: 本次修复向后兼容,不会影响现有功能的使用。关键改进是确保新上传文件通过OSS ID获取图片,与历史文件处理机制保持一致。