Angularjs 使用angular从flask提供令牌保护的文件 我有一个文件,由flask提供,以令牌为基础进行保护 认证 我想从angular应用程序下载它 令牌存储在angular会话中,并放入每个$http.get或post的头中
但是,当我只是放置一个指向flask路径的链接时,令牌不会添加到请求头中,因为它不是$http.get(),而是一个普通的锚,我不能这样做(对吧?) 我不想将url中的令牌作为查询字符串参数传递。 如何向用户提供下载?我应该先将$http.get()放入angular中,然后通过隧道将其作为文件下载吗 登录后的令牌存储:Angularjs 使用angular从flask提供令牌保护的文件 我有一个文件,由flask提供,以令牌为基础进行保护 认证 我想从angular应用程序下载它 令牌存储在angular会话中,并放入每个$http.get或post的头中,angularjs,download,flask,token,flask-security,Angularjs,Download,Flask,Token,Flask Security,但是,当我只是放置一个指向flask路径的链接时,令牌不会添加到请求头中,因为它不是$http.get(),而是一个普通的锚,我不能这样做(对吧?) 我不想将url中的令牌作为查询字符串参数传递。 如何向用户提供下载?我应该先将$http.get()放入angular中,然后通过隧道将其作为文件下载吗 登录后的令牌存储: $window.sessionStorage.token = results.response.user.authentication_token; 它被注入到每个$http
$window.sessionStorage.token = results.response.user.authentication_token;
它被注入到每个$http get或post中:
config.headers['Authentication-Token'] = $window.sessionStorage.getItem('token');
烧瓶(带烧瓶安全装置)部分:
如何解决此问题?首先通过$http.get()获取数据 我发现有两种方法:
$http.get('/downloadpath').
success(function(downloadresult){
fileData = new Blob([downloadresult], { type: 'text/csv' });
fileUrl = URL.createObjectURL(fileData);
$scope.download_href = fileUrl;
});
HTML:
作为补充,这里是方法1:
var app = angular.module('myApp', []);
app.config( [
'$compileProvider',
function( $compileProvider )
{
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|data|blob):/);
}
]);
方法1
对于html,也一样:
<a href="{{download_href}}" download="filename.ext">download</a>
两种方法的角度要求
您需要将方法2的blob协议和方法1的数据协议列为白名单:
var app = angular.module('myApp', []);
app.config( [
'$compileProvider',
function( $compileProvider )
{
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|data|blob):/);
}
]);
看看这个解决方案。不过只适用于HTML5。谢谢!这是一个很好的技巧,我很快就会写出答案
$http.get('/downloadpath').
success(function(downloadresult){
$scope.download_href = downloadresult;
});
<a href="{{download_href}}" download="filename.ext">download</a>
@app.route("/downloadpath", methods=['GET'])
@auth_token_required
def download():
encoded = base64.b64encode(open('export.csv','br').read())
response = 'data:text/csv;base64,{}'.format(str(encoded, encoding='utf-8'))
return response
var app = angular.module('myApp', []);
app.config( [
'$compileProvider',
function( $compileProvider )
{
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|data|blob):/);
}
]);