Browse Source

feat: update download

gemercheung 6 months ago
parent
commit
299c5f8621
1 changed files with 21 additions and 6 deletions
  1. 21 6
      src/view/case/download.vue

+ 21 - 6
src/view/case/download.vue

@@ -6,10 +6,7 @@
     </div>
 
     <div v-if="state === State.package">
-      <div
-        class="text"
-        style="display: flex; justify-content: space-between; margin-top: 15px"
-      >
+      <div class="text" style="display: flex; justify-content: space-between; margin-top: 15px">
         <span>{{ filename }}</span>
         <span>{{ percent }}%</span>
       </div>
@@ -93,6 +90,19 @@ const initial = async () => {
     downloadURL.value = res.data.downloadUrl;
   }
 };
+function isValidUrl(url) {
+  // 正则表达式模式
+  const pattern = new RegExp(
+    '^(https?:\\/\\/)?' + // 协议 (http:// 或 https://)
+    '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // 域名
+    '((\\d{1,3}\\.){3}\\d{1,3}))' + // 或 IP 地址
+    '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // 端口和路径
+    '(\\?[;&a-z\\d%_.~+=-]*)?' + // 查询字符串
+    '(\\#[-a-z\\d_]*)?$', 'i' // 片段
+  );
+
+  return pattern.test(url);
+}
 
 // 下载
 const download = () => {
@@ -100,9 +110,14 @@ const download = () => {
     ElMessage.error("下载链接未生成,请稍等!");
     throw "下载链接未生成,请稍等!";
   } else {
-    if (!downloadURL.value.startsWith("/")) {
-      downloadURL.value = "/" + downloadURL.value;
+    if (isValidUrl(downloadURL.value)) {
+      downloadURL.value = downloadURL.value;
+    } else {
+      if (!downloadURL.value.startsWith("/")) {
+        downloadURL.value = "/" + downloadURL.value;
+      }
     }
+
     console.error("downloadURL.value", downloadURL.value);
     return saveAs(downloadURL.value, filename.value);
   }