get请求下载文件并保持原文件名

get方法请求,在新标签页下载,避免图片或PDF文件在当前页面直接打开。保持原文件名,重复文件按“文件名(1)”、“文件名(2)”命名。

java下载接口

    /**
     * 通用下载请求
     * 
     * @param fileName 文件名称
     * @param delete 是否删除
     */
    @GetMapping("/download")
    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
    {
        try
        {
            if (!FileUtils.checkAllowDownload(fileName))
            {
                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
            }
            // String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
            String realFileName = fileName.substring(fileName.indexOf("_") + 1);
            String filePath = RuoYiConfig.getDownloadPath() + fileName;

            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            FileUtils.setAttachmentResponseHeader(response, realFileName);
            FileUtils.writeBytes(filePath, response.getOutputStream());
            if (delete)
            {
                FileUtils.deleteFile(filePath);
            }
        }
        catch (Exception e)
        {
            log.error("下载文件失败", e);
        }
    }

js工具类

// 通用下载方法
export function download_ex(fileName) {
	// window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
	var elemIF = document.createElement("iframe");
	elemIF.src = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
	elemIF.style.display = "none";
	document.body.appendChild(elemIF);
}

挂载工具到全局(main.js)

import { download_ex } from "@/utils/ruoyi";

Vue.prototype.download_ex = download_ex

js调用

    /** 导出PDF */
    handlePDF(row) {
      const drId = row.drId || this.ids
      exportPDF(drId).then(response => {
        if(response.msg == null)
        {
          this.msgError("没有文号,不允许导出");
        }
        else
        {
          this.download_ex(response.msg);
          this.msgSuccess("导出PDF文件成功");
        }
      });
    },

 

你可以使用 Vue.js 的 axios 库来下载文件,并通过修改 `Content-Disposition` 头部来更改文件名。下面是一个示例代码: ```javascript // 导入axios库 import axios from 'axios'; // 定义下载文件的函数 function downloadFile(url, filename) { axios({ url: url, method: 'GET', responseType: 'blob' // 设置响应类型为blob }).then(response => { const blob = new Blob([response.data]); if (typeof window.navigator.msSaveBlob !== 'undefined') { // 兼容IE,使用msSaveBlob方法进行下载 window.navigator.msSaveBlob(blob, filename); } else { // 创建一个临时的URL对象,并指定下载文件的名称 const url = window.URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = filename; // 模拟点击下载链接 link.click(); // 释放临时的URL对象 window.URL.revokeObjectURL(url); } }); } // 调用下载文件的函数 downloadFile('http://example.com/file.pdf', 'newfilename.pdf'); ``` 在上面的代码中,我们首先导入了 axios 库,然后定义了一个名为 `downloadFile` 的函数。该函数接受两个参数:文件的 URL 和要更改的文件名。 在函数内部,我们使用 axios 发起 GET 请求,设置响应类型为 `blob`,以便获取文件的二进制数据。然后,我们创建一个 `Blob` 对象,并根据浏览器支持情况使用不同的方法进行文件下载。 如果浏览器支持 `msSaveBlob` 方法(如IE),我们使用该方法进行下载。否则,我们创建一个临时的 URL 对象,并将其赋值给一个新创建的 `<a>` 元素的 `href` 属性。然后设置 `download` 属性为要更改的文件名,并模拟点击链接进行下载。 最后,我们释放临时的 URL 对象,以便在下载完成后清理资源。 你可以根据自己的需求调整代码中的 URL 和文件名,以适配你的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

外码斯迪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值