Browse Source

feat: 任何文件失败都提示zip上传

main
buaixuexideshitongxue 1 month ago
parent
commit
bdc1b6da77
  1. 24
      src/components/file/upload.vue

24
src/components/file/upload.vue

@ -61,7 +61,7 @@ const files = ref(props.files);
const allowArchiveFallback = ref(false);
const fallbackArchiveExts = ['zip', 'rar', '7z'];
const archiveExts = [...fallbackArchiveExts, 'tar', 'gz', 'bz2', 'xz', 'iso', 'dmg'];
const pdfResponseTimeout = 15000;
const uploadResponseTimeout = 15000;
const responseTimers = new Map();
function getFileExt(file) {
@ -70,11 +70,11 @@ function getFileExt(file) {
}
function enableArchiveFallback(file) {
if (getFileExt(file) !== 'pdf') {
if (archiveExts.includes(getFileExt(file))) {
return false;
}
allowArchiveFallback.value = true;
feedback.msgError('PDF上传失败,已临时允许上传一个 ZIP、RAR 或 7Z 压缩包');
feedback.msgError('文件上传失败,已临时允许上传一个 ZIP、RAR 或 7Z 压缩包');
return true;
}
@ -86,15 +86,15 @@ function clearResponseTimer(file) {
responseTimers.delete(file?.uid);
}
function startPdfResponseTimer(file) {
if (getFileExt(file) !== 'pdf' || responseTimers.has(file?.uid)) {
function startUploadResponseTimer(file) {
if (archiveExts.includes(getFileExt(file)) || responseTimers.has(file?.uid)) {
return;
}
const timer = window.setTimeout(() => {
responseTimers.delete(file.uid);
uploadRef.value?.abort(file);
handleError(new Error('PDF保存响应超时'), file);
}, pdfResponseTimeout);
handleError(new Error('文件保存响应超时'), file);
}, uploadResponseTimeout);
responseTimers.set(file.uid, timer);
}
@ -132,11 +132,11 @@ function beforeUpload(file) {
if (archiveExts.includes(ext)) {
if (!allowArchiveFallback.value) {
feedback.msgWarning('压缩包仅在 PDF 上传失败后允许上传')
feedback.msgWarning('压缩包仅在文件上传失败后允许上传')
return false
}
if (!fallbackArchiveExts.includes(ext)) {
feedback.msgWarning('PDF 上传失败后仅支持 ZIP、RAR 或 7Z 压缩包')
feedback.msgWarning('文件上传失败后仅支持 ZIP、RAR 或 7Z 压缩包')
return false
}
}
@ -149,7 +149,7 @@ function beforeUpload(file) {
if (fallbackArchiveExts.includes(ext)) {
allowArchiveFallback.value = false;
}
if (ext === 'pdf') {
if (!archiveExts.includes(ext)) {
allowArchiveFallback.value = false;
}
files.value.push({
@ -166,7 +166,7 @@ function uploadProgress(progressEvent, file) {
const percent = parseInt(progressEvent.percent);
filterFiles[0].percent = Math.min(99, percent);
if (percent >= 100) {
startPdfResponseTimer(file);
startUploadResponseTimer(file);
}
}
}
@ -184,7 +184,7 @@ function handleSuccess(data, file) {
}
return;
}
if (getFileExt(file) === 'pdf') {
if (!archiveExts.includes(getFileExt(file))) {
allowArchiveFallback.value = false;
}
if (filterFiles.length) {

Loading…
Cancel
Save