Browse Source

fix: pdf失败之后零食开启一个

main
buaixuexideshitongxue 1 month ago
parent
commit
e154005bdb
  1. 72
      src/components/file/upload.vue

72
src/components/file/upload.vue

@ -56,6 +56,23 @@ const props = defineProps({
const emit = defineEmits(["update:files"]); const emit = defineEmits(["update:files"]);
const files = ref(props.files); const files = ref(props.files);
const allowArchiveFallback = ref(false);
const fallbackArchiveExts = ['zip', 'rar', '7z'];
const archiveExts = [...fallbackArchiveExts, 'tar', 'gz', 'bz2', 'xz', 'iso', 'dmg'];
function getFileExt(file) {
const name = (file?.name || file?.raw?.name || '').toLowerCase();
return name.includes('.') ? name.split('.').pop() : '';
}
function enableArchiveFallback(file) {
if (getFileExt(file) !== 'pdf') {
return false;
}
allowArchiveFallback.value = true;
feedback.msgError('PDF上传失败,已临时允许上传一个 ZIP、RAR 或 7Z 压缩包');
return true;
}
watch( watch(
() => props.files, () => props.files,
@ -73,13 +90,10 @@ watch(files, () => {
},{immediate:true}); },{immediate:true});
function beforeUpload(file) { function beforeUpload(file) {
const name = (file?.name || '').toLowerCase() const ext = getFileExt(file)
const ext = name.includes('.') ? name.split('.').pop() : ''
// //
const imageExts = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'tif', 'ico', 'heic', 'heif'] const imageExts = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'tif', 'ico', 'heic', 'heif']
//
const archiveExts = ['zip', 'rar', '7z', 'tar', 'gz', 'bz2', 'xz', 'iso', 'dmg']
// PDF // PDF
if (imageExts.includes(ext)) { if (imageExts.includes(ext)) {
@ -87,10 +101,15 @@ function beforeUpload(file) {
return false return false
} }
//
if (archiveExts.includes(ext)) { if (archiveExts.includes(ext)) {
feedback.msgWarning('暂不支持压缩包上传') if (!allowArchiveFallback.value) {
return false feedback.msgWarning('压缩包仅在 PDF 上传失败后允许上传')
return false
}
if (!fallbackArchiveExts.includes(ext)) {
feedback.msgWarning('PDF 上传失败后仅支持 ZIP、RAR 或 7Z 压缩包')
return false
}
} }
// 100MB // 100MB
@ -98,6 +117,12 @@ function beforeUpload(file) {
feedback.msgError('文件大小不能超过100MB'); feedback.msgError('文件大小不能超过100MB');
return false; return false;
} }
if (fallbackArchiveExts.includes(ext)) {
allowArchiveFallback.value = false;
}
if (ext === 'pdf') {
allowArchiveFallback.value = false;
}
files.value.push({ files.value.push({
uid: file.uid, uid: file.uid,
percent: 0, percent: 0,
@ -109,29 +134,48 @@ function uploadProgress(progressEvent, file) {
const filterFiles = files.value.filter((item) => file.uid === item.uid); const filterFiles = files.value.filter((item) => file.uid === item.uid);
if (filterFiles.length) { if (filterFiles.length) {
filterFiles[0].percent = Math.min(99, parseInt(progressEvent.percent));
filterFiles[0].percent = parseInt(progressEvent.percent);
} }
} }
function handleSuccess(data, file) { function handleSuccess(data, file) {
const filterFiles = files.value.filter((item) => file.uid === item.uid); const filterFiles = files.value.filter((item) => file.uid === item.uid);
if (data.code !== 200) { if (data.code !== 200) {
feedback.msgError(data.message); if (!enableArchiveFallback(file)) {
files.value.splice(files.value.indexOf(filterFiles[0]), 1); feedback.msgError(data.message);
}
if (filterFiles.length) {
files.value.splice(files.value.indexOf(filterFiles[0]), 1);
emit("update:files", files.value);
}
return; return;
} }
if (getFileExt(file) === 'pdf') {
allowArchiveFallback.value = false;
}
if (filterFiles.length) { if (filterFiles.length) {
filterFiles[0].percent = 100;
filterFiles[0].fileName = data.data.fileName; filterFiles[0].fileName = data.data.fileName;
filterFiles[0].filePath = data.data.filePath; filterFiles[0].filePath = data.data.filePath;
filterFiles[0].loading = false; window.setTimeout(() => {
filterFiles[0].loading = false;
emit("update:files", files.value);
}, 300);
} }
console.log("file", files.value); console.log("file", files.value);
emit("update:files", files.value);
} }
function handleError(e, file) { function handleError(e, file) {
console.log(e, file); console.log(e, file);
feedback.msgError("上传失败!"); const fileIndex = files.value.findIndex((item) => file.uid === item.uid);
if (fileIndex > -1) {
files.value.splice(fileIndex, 1);
emit("update:files", files.value);
}
if (enableArchiveFallback(file)) {
return;
}
feedback.msgError("上传失败,请重试!");
} }
</script> </script>

Loading…
Cancel
Save