feat: 优化文件处理逻辑,增强文件名提取功能并支持显示文件名

This commit is contained in:
Jafeng 2026-05-27 13:57:12 +08:00
parent 8548651d80
commit de6a8266f7
2 changed files with 52 additions and 7 deletions

View File

@ -40,13 +40,23 @@ const files = computed(() => {
if (Array.isArray(v)) { if (Array.isArray(v)) {
return v return v
.map((i) => { .map((i) => {
if (typeof i === 'string') return { url: normalizeFileUrl(i) }; if (typeof i === 'string') return { url: normalizeFileUrl(i), name: getFileNameFromUrl(i) };
if (i && typeof i === 'object' && i.url) return { url: normalizeFileUrl(String(i.url)) }; if (i && typeof i === 'object' && i.url) {
const url = normalizeFileUrl(String(i.url));
return {
...i,
url,
name: i.name || i.fileName || getFileNameFromUrl(url),
};
}
return null; return null;
}) })
.filter(Boolean); .filter(Boolean);
} }
if (typeof v === 'string' && v) return [{ url: normalizeFileUrl(v) }]; if (typeof v === 'string' && v) {
const url = normalizeFileUrl(v);
return [{ url, name: getFileNameFromUrl(url) }];
}
return []; return [];
}); });
@ -74,7 +84,21 @@ async function add() {
} }
const url = await chooseAndUploadImage({ count: 1 }); const url = await chooseAndUploadImage({ count: 1 });
if (!url) return; if (!url) return;
emitValue([...files.value, { url }]); emitValue([...files.value, { url, name: getFileNameFromUrl(url) }]);
}
function getFileNameFromUrl(url) {
const cleanUrl = String(url || '').split('?')[0].split('#')[0];
const rawName = cleanUrl.split('/').pop() || '';
if (!rawName) return '';
let fileName = rawName;
try {
fileName = decodeURIComponent(rawName);
} catch (error) {
fileName = rawName;
}
return fileName.replace(/^\d{10,}[-_]/, '');
} }
</script> </script>

View File

@ -405,19 +405,40 @@ const normalizeCategory = (item, categoryType) => {
const normalizeFiles = (files) => { const normalizeFiles = (files) => {
if (!Array.isArray(files)) return []; if (!Array.isArray(files)) return [];
return files return files
.map((item) => { .map((item, index) => {
if (typeof item === "string") return { type: "image", url: normalizeFileUrl(item) }; if (typeof item === "string") {
const url = normalizeFileUrl(item);
return { type: "image", url, name: getFileDisplayName({ url }, index) };
}
const url = item?.url || item?.URL || item?.download_url; const url = item?.url || item?.URL || item?.download_url;
if (!url) return null; if (!url) return null;
return { return {
type: item.type || "image", type: item.type || "image",
url: normalizeFileUrl(url), url: normalizeFileUrl(url),
name: item.name || item.fileName || "", name: getFileDisplayName({ ...item, url }, index),
}; };
}) })
.filter(Boolean); .filter(Boolean);
}; };
const getFileNameFromUrl = (url) => {
const cleanUrl = String(url || "").split("?")[0].split("#")[0];
const rawName = cleanUrl.split("/").pop() || "";
if (!rawName) return "";
let fileName = rawName;
try {
fileName = decodeURIComponent(rawName);
} catch (error) {
fileName = rawName;
}
return fileName.replace(/^\d{10,}[-_]/, "");
};
const getFileDisplayName = (file, index = 0) => {
return file?.name || file?.fileName || file?.originalname || getFileNameFromUrl(file?.url || file?.URL || file?.download_url) || `图片${index + 1}`;
};
const normalizePhrase = (item, phraseType) => ({ const normalizePhrase = (item, phraseType) => ({
id: item._id || item.id, id: item._id || item.id,
cateId: item.cateId || item.categoryId, cateId: item.cateId || item.categoryId,