RuoYi框架实现文件下载实现

该博客主要讨论了如何改进Ruoyi模板下载文件的功能。前端需要注意使用location.href而非ajax来触发下载,以确保浏览器打开下载弹窗。后端通过设置响应头并写入文件内容来实现下载。文章提供了具体的前端JS实现和后端Java代码示例,确保文件能正确下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章仅针对ruoyi模板的下载文件功能,对其进行修改


前端
注意事项:.不要用ajax传参,可以使用 location.href的方式,使用ajax调用Controller不会开启下载文件弹窗,但是会正常下载文件,控制台也不会报错,下载好的文件会在浏览器中的network中的最新一条请求中的response中找到二进制文件数据
filename均为/profile/upload开头

前端代码实现:

Js实现:

function downLoads(evidenceUrl,evidenceName) {
            window.location.href=ctx +"common/download/resource?resource="+ evidenceUrl + "&name=" + evidenceName;
        }

后端代码实现:

    /**
     * 本地资源通用下载
     */
    @GetMapping("/common/download/resource")
    public void resourceDownload(String resource, String name, HttpServletRequest request, HttpServletResponse response) {
        try {
            if (!FileUtils.checkAllowDownload(resource)) {
                throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
            }
            // 本地资源路径
            String localPath = RuoYiConfig.getProfile();
            // 数据库资源地址
            String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
            // 下载名称
            String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            if (!name.equals("") && name != null) {
                FileUtils.setAttachmentResponseHeader(response, name);
            } else {
                FileUtils.setAttachmentResponseHeader(response, downloadName);
            }
            FileUtils.writeBytes(downloadPath, response.getOutputStream());
        } catch (Exception e) {
            e.printStackTrace();
            log.error("下载文件失败", e);

        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傲骄鹿先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值