uniapp导出excel(后端生成,前端下载打开)
发布日期:2021-05-08 03:40:33 浏览次数:76 分类:精选文章

本文共 4043 字,大约阅读时间需要 13 分钟。

解决方案:前后端资源路径配置优化

在前后端协同开发中,资源路径的配置是关键,尤其是在打包成jar包后运行时,路径的处理需要特别注意。以下是针对当前问题的详细解决方案:

一、前端代码优化

在前端代码中,文件下载逻辑需要动态获取正确的文件路径,以适应不同的运行环境。以下是优化后的代码:

exportExcel(e) {    // 访问后端接口生成Excel文件    uni.request({        url: getApp().globalData.url + "/dhTask/exportExcelByProTaskId",        data: { proTaskId: this.production_task_id },        method: "POST",        header: {            'content-type': 'application/x-www-form-urlencoded',            'Authorization': uni.getStorageSync("token")        },        success: (res) => {            if (res.data.code === 200) {                if (res.data.data === 1) {                    // 动态获取正确的文件路径                    const urlPrefix = getApp().globalData.url;                    const filePath = `${urlPrefix}/excel/${this.production_task_id}.xls`;                                        // 使用 uni.downloadFile 获取文件                    uni.downloadFile({                        url: filePath,                        success: (res) => {                            const tempFilePath = res.tempFilePath;                            uni.saveFile({                                tempFilePath,                                success: (res) => {                                    const savedFilePath = res.savedFilePath;                                    // 打开Excel文件                                    uni.openDocument({                                        filePath: savedFilePath,                                        success: (res) => {                                            console.log('成功打开文档');                                            this.getajax4("/dhTask/deleteExcel", { production_task_id: this.production_task_id }, 'post', function(a, b) {                                                // 处理删除操作                                            });                                        }                                    });                                },                                fail: () => {                                    console.log('下载失败');                                }                            });                        }                    });                }            }        },        error: () => {            uni.showToast({ title: "操作失败1!", icon: "none" });            return 0;        }    });}

二、后端代码优化

在后端代码中,优化静态资源映射路径配置,确保在不同环境下都能正确映射到资源文件:

@Configurationpublic class CrossDomainConfig implements WebMvcConfigurer {    @Override    public void addCorsMappings(CorsRegistry registry) {        registry.addMapping("/**")                .allowCredentials(true)                .allowedOrigins("*")                .allowedMethods("GET", "POST", "OPTIONS")                .maxAge(3600);    }    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {        String path = "";        if (XmlUtils.class.getResource("").toString().contains("jar:")) {            String projectPath = System.getProperty("user.dir");            path = new File(projectPath + "/classes/static/asserts/img/excel/").getPath() + "\\";        } else {            path = XmlUtils.class.getResource("/static/asserts/img/excel/").getPath().replace("file:", "").replace("/", File.separator);        }        registry.addResourceHandler("/excel/**")                .addResourceLocations("file:" + path);        WebMvcConfigurer.super.addResourceHandlers(registry);    }}

三、关键问题分析

  • 资源路径统一:前后端必须对资源路径有统一的理解,尤其是在打包成jar包后,资源路径可能会发生变化。

  • 动态路径获取:在前端代码中,不能直接使用固定路径,而是应根据实际环境获取正确的路径。使用 getApp().globalData.url 可以获取到当前环境下的路径。

  • 后端资源服务:在后端,使用 ResourceHandlerRegistry 统一配置资源路径,确保前后端能够正确地加载静态资源。

  • 四、测试验证

  • 运行环境测试

    • 在 idea 中运行,确保能够正常下载并打开 Excel 文件。
    • 打包成 jar 后,部署到服务器,测试前端是否能正确获取 Excel 文件。
  • 调试日志

    • 在前端和后端分别打印日志,确认在不同环境下,获取到的路径是否一致。
    • 检查后端生成 Excel 文件的路径是否正确,确保文件存在。
  • 错误处理

    • 在打包成 jar 后,检查是否有路径转换错误,确保前端能够正确访问后端服务提供的文件路径。
  • 五、优化效果

    通过上述优化,前后端的资源路径配置更加统一,能够在不同环境下正常运行。前端代码动态获取路径,避免了固定路径带来的问题;后端代码通过统一配置,确保资源能够被正确访问和处理。

    六、注意事项

    • 路径转换:确保在不同操作系统下路径转换正确,避免因路径问题导致的文件访问失败。
    • 缓存问题:在前后端交互时,检查是否存在缓存导致的路径问题,必要时清理缓存或重新加载资源。
    • 权限控制:确保前端有权限访问后端的资源路径,避免跨域或权限问题导致文件下载失败。

    通过以上优化,可以有效解决前后端资源路径配置的问题,确保在不同环境下都能正常运行。

    上一篇:使用springboot+angular导出excel
    下一篇:target加载不出文件的原因之一

    发表评论

    最新留言

    哈哈,博客排版真的漂亮呢~
    [***.90.31.176]2025年04月11日 19时40分04秒