由于业务需要,在点击显示链接(如www.xxx.com/2015-01-15/xxx.png)显示媒体资源(如图片、视频、音频、文档),而在点击下载链接(如www.xxx.com/2015-01-15/xxx.png?download=true)请求静态资源时,强制下载而不是在浏览器中直接显示。可以采用nginx配置加前端js方法来实现。

1、配置NGINX配置、在nginx的站点配置server { } 里面添加如下:

location ~ .*\.(gif|jpg|jpeg|bmp|png|mp3|wma|mp4|swf|txt)$
 {
     if ( $query_string ~ "download=true$" )
     {
         add_header Content-Disposition "attachment; filename=$request_filename";
     }
 }

2、前端js 实现方法、在vue中定义方法、在下载按钮上调用即可:

// JS 方法、传入文件URL。点击事件上调用download方法即可
download (data) {
    if (!data) {
        return
    }
    let filename = data.replace(/(.+)[\\/]/,"");
    let url = data + "?download=true";
    let link = document.createElement('a')
    link.style.display = 'none'
    link.href = url
    link.setAttribute('download', filename)

    document.body.appendChild(link)
    link.click()
}

 

最后修改日期: 2018年8月21日

作者