如何阻止通过下载目录里的地址下载文件

场景:在日常开发中我们会遇到通过创建a标签来下载文件,代码如下:
            var xhr = new XMLHttpRequest();
            xhr.open('GET',  url, true);
            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            xhr.onload = function() {
                if(this.status==200){
                    var reader = new FileReader();
                    reader.readAsDataURL(xhr.response);
                    reader.onload = function(e){
                        const a = document.createElement('a');
                        a.download = '文件名.文件后缀';
                        a.href = e.target.result;
                        document.body.appendChild(a);
                        a.click();
                        document.body.removeChild(a);
                    };
                }            
            };
            xhr.send();

这个时候会在下载目录里记录下载的url,拿到这个url可以在任何地方下载,如果此时的文件有下载权限的话,为了解决这个问题,可以稍加修改

            var xhr = new XMLHttpRequest();
            xhr.open('GET',url, true);

            xhr.responseType = 'blob';  // 需要将responseType值设置为'bolb'
            xhr.setRequestHeader('token', token); 
            xhr.setRequestHeader('Secure-Token', hex_md5(secureToken));

            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            xhr.onload = function() {
                if(this.status==200){
                    reader.onload = function(e){

                        //  window.URL.createObjectURL(new Blob([xhr.response]))
                        var url = window.URL.createObjectURL(new Blob([xhr.response]));

                        var a = document.createElement('a');
                        a.download = '文件名.文件后缀';
                        a.href = url;
                        document.body.appendChild(a);
                        a.click();
                        document.body.removeChild(a);
                    };
                }            
            };
            xhr.send();

你可能感兴趣的:(如何阻止通过下载目录里的地址下载文件)