js下载改变文件名,php下载文件到浏览器

最简单的:

1.html实现:

<td><a download='<?php echo $name; ?>' href='<?php echo $url; ?>'>下载</a></td>

注意:这个有限制,只能是同源的文件才可以设置文件名,跨域的虽然可以下载,但是没办法设置文件名字,跨域的时候download属性不起作用。

2.js下载改变文件名:

设置no-cors跨过跨域验证。

const downloadRes = async (url, name) => {
    let response = await fetch(url, {
        mode: "no-cors" # fetch设了mode='no-cors'表示不垮域,可以请求成功,但不好意思,你拿不到服务器返回数据,它被标记了'opaque',请求没发出去请看控制台网络面板
    })
    // 内容转变成blob地址
    let blob = await response.blob()
    // 创建隐藏的可下载链接
    let objectUrl = window.URL.createObjectURL(blob)
    let a = document.createElement('a')
    //地址
    a.href = objectUrl
    //修改文件名
    a.download = name
    // 触发点击
    document.body.appendChild(a)
    a.click()
    //移除
    setTimeout(() => document.body.removeChild(a), 1000)
}

3.后端实现

前台显示:

<td><a href='<?php echo FULL_BASE_URL.'/Commons/download?'.http_build_query(['url'=>$url,'name'=>$name]); ?>'>下载</a></td>

后端方法:

    /**
     * 文件下载,可跨域,可重命名
     * @return [type] [description]
     */
    public function download() {
        $params=$this->request->query;
        $file_url = $params['url'];
        $name = $params['name'];
        if ($file_url && $name) {
            $size=readfile($file_url);
            header("Content-type:application/octet-stream");
            header("Content-Disposition:attachment;filename=$name");
            exit;
        }
        throw new Exception("参数不对!", 1);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SHUIPING_YANG

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

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

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

打赏作者

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

抵扣说明:

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

余额充值