diff --git a/core/core-frontend/src/api/datasource.ts b/core/core-frontend/src/api/datasource.ts
index 8d85bf637e..ef14354ba6 100644
--- a/core/core-frontend/src/api/datasource.ts
+++ b/core/core-frontend/src/api/datasource.ts
@@ -152,6 +152,7 @@ export const uploadFile = async (data): Promise<IResponse> => {
     .post({
       url: '/datasource/uploadFile',
       data,
+      loading: true,
       headersType: 'multipart/form-data;'
     })
     .then(res => {
diff --git a/core/core-frontend/src/config/axios/service.ts b/core/core-frontend/src/config/axios/service.ts
index 5e63f9c618..fc68c6859a 100644
--- a/core/core-frontend/src/config/axios/service.ts
+++ b/core/core-frontend/src/config/axios/service.ts
@@ -210,7 +210,7 @@ service.interceptors.response.use(
     ) {
       ElMessage({
         type: 'error',
-        message: error.message,
+        message: error.response?.data?.msg ? error.response?.data?.msg : error.message,
         showClose: true
       })
     } else if (error?.config?.url.startsWith('/xpackComponent/content')) {
diff --git a/core/core-frontend/src/views/visualized/data/datasource/form/ExcelDetail.vue b/core/core-frontend/src/views/visualized/data/datasource/form/ExcelDetail.vue
index 9d06d385d1..3c5c7704a8 100644
--- a/core/core-frontend/src/views/visualized/data/datasource/form/ExcelDetail.vue
+++ b/core/core-frontend/src/views/visualized/data/datasource/form/ExcelDetail.vue
@@ -354,11 +354,24 @@ const uploadExcel = () => {
   formData.append('type', '')
   formData.append('editType', param.value.editType)
   formData.append('id', param.value.id || 0)
-  return uploadFile(formData).then(res => {
-    upload.value?.clearFiles()
-    uploadAgain.value?.clearFiles()
-    uploadSuccess(res)
-  })
+  loading.value = true
+  return uploadFile(formData)
+    .then(res => {
+      upload.value?.clearFiles()
+      uploadAgain.value?.clearFiles()
+      uploadSuccess(res)
+      loading.value = false
+    })
+    .catch(error => {
+      if (error.code === 'ECONNABORTED') {
+        ElMessage({
+          type: 'error',
+          message: error.message,
+          showClose: true
+        })
+      }
+      loading.value = false
+    })
 }
 const excelForm = ref()
 const submitForm = () => {
@@ -394,6 +407,7 @@ defineExpose({
         require-asterisk-position="right"
         :model="param"
         label-position="top"
+        v-loading="loading"
       >
         <el-form-item
           v-if="sheetFile.name"
diff --git a/sdk/common/src/main/java/io/dataease/filter/HtmlResourceFilter.java b/sdk/common/src/main/java/io/dataease/filter/HtmlResourceFilter.java
index c84453aafe..cdeda6baae 100644
--- a/sdk/common/src/main/java/io/dataease/filter/HtmlResourceFilter.java
+++ b/sdk/common/src/main/java/io/dataease/filter/HtmlResourceFilter.java
@@ -1,5 +1,7 @@
 package io.dataease.filter;
 
+import io.dataease.result.ResultMessage;
+import io.dataease.utils.JsonUtil;
 import jakarta.servlet.*;
 import jakarta.servlet.FilterConfig;
 import jakarta.servlet.http.HttpServletResponse;
@@ -36,7 +38,14 @@ public class HtmlResourceFilter implements Filter, Ordered {
             httpResponse.setHeader(HttpHeaders.EXPIRES, "0");
         }
         // 继续执行过滤器链
-        filterChain.doFilter(servletRequest, httpResponse);
+        try {
+            filterChain.doFilter(servletRequest, httpResponse);
+        }catch (Exception e){
+            httpResponse.setContentType("application/json");
+            httpResponse.setCharacterEncoding("UTF-8");
+            httpResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+            httpResponse.getWriter().write(JsonUtil.toJSONString(new ResultMessage(HttpServletResponse.SC_BAD_REQUEST,e.getMessage())).toString());
+        }
     }
 
     @Override