安全 RESTful API - 如何下载文件
Secured RESTful API - How to download a file
我正在用 Spring Boot
开发 RESTful API 并用 oAuth2.0
保护(通过 Spring Security
),我的前端在 AngularJS .
我需要下载一个文件,我读到的每个 post 都说(我理解)我应该使用 window.open('urlToTheFileEndpoint');
但是那样做,我无法添加安全性 header(就像我所有其他 ajax 请求一样),因此 API 不允许完成我的请求。
有办法处理吗?或者我应该让这个文件端点不安全吗?
这个 SO 线程可能有用:
Download file with a REST request needing headers and giving the content
还提到这篇文章:
File Download with HTTP Request Header
这是一个片段:
var id = 123;
var req = ic.ajax.raw({
type: 'GET',
url: '/api/dowloads/'+id,
beforeSend: function (request) {
request.setRequestHeader('token', 'token for '+id);
},
processData: false
});
这就是我解决问题的方法:
当用户单击 "download" 时,我将对 API 服务器进行 ajax 调用,这不是 returns 文件,而是 returns临时 uuid
。服务器将创建一个名为 uuid.route
(即:abc-123.route)的临时文件,其中包含到该文件的真实路径(即:/mnt/data/files/excel_template.xlsx)。
然后当ajax用uuid调用returns时,我可以调用window.open('getFile?uuid=abc-123')
。这将是一个不安全的端点。但一旦下载完成或在过期时间内,此路由文件将被删除,无法再次调用。
这样,它支持任何文件,任何大小。
这是我最好的方法。
我正在用 Spring Boot
开发 RESTful API 并用 oAuth2.0
保护(通过 Spring Security
),我的前端在 AngularJS .
我需要下载一个文件,我读到的每个 post 都说(我理解)我应该使用 window.open('urlToTheFileEndpoint');
但是那样做,我无法添加安全性 header(就像我所有其他 ajax 请求一样),因此 API 不允许完成我的请求。
有办法处理吗?或者我应该让这个文件端点不安全吗?
这个 SO 线程可能有用:
Download file with a REST request needing headers and giving the content
还提到这篇文章:
File Download with HTTP Request Header
这是一个片段:
var id = 123;
var req = ic.ajax.raw({
type: 'GET',
url: '/api/dowloads/'+id,
beforeSend: function (request) {
request.setRequestHeader('token', 'token for '+id);
},
processData: false
});
这就是我解决问题的方法:
当用户单击 "download" 时,我将对 API 服务器进行 ajax 调用,这不是 returns 文件,而是 returns临时 uuid
。服务器将创建一个名为 uuid.route
(即:abc-123.route)的临时文件,其中包含到该文件的真实路径(即:/mnt/data/files/excel_template.xlsx)。
然后当ajax用uuid调用returns时,我可以调用window.open('getFile?uuid=abc-123')
。这将是一个不安全的端点。但一旦下载完成或在过期时间内,此路由文件将被删除,无法再次调用。
这样,它支持任何文件,任何大小。
这是我最好的方法。