Javascript 安全文件服务
我试图提供一个网站的安全文件服务功能。我已经考虑了几个适合我当前车型的选项:Javascript 安全文件服务,javascript,jquery,Javascript,Jquery,我试图提供一个网站的安全文件服务功能。我已经考虑了几个适合我当前车型的选项: 使用XMLHttpRequest检索文件内容,然后根据文件类型和用户偏好提供显示或另存为功能 我了解如何使用二进制Ajax功能(blob、arraybuffer)检索二进制文件,我也了解了如何实现HTML5另存为功能,但我关心的是这种技术的性能:大文件。我还没有测试过,但我不希望使用这种技术下载1GB+文件时有好的性能 在链接上设置HTTP头(请参见下文),这样我就可以在头中传递身份验证令牌,但仍然可以像正常下载一样将
window.location.href = 'blah';
并具有观察设置自定义HTTP头的网络流量的代码:
httpChannel.setRequestHeader("X-Hello", "World", false);
虽然Firefox可以做到这一点很酷,但我需要一个跨浏览器的解决方案。我看到这个问题:
这基本上就是我想要做的,但唯一推荐的解决方案是设置会话cookies,我不使用它。好的,所以我使用选项1构建了一个函数。从我的问题。仍然担心文件大小和性能,但这里有一个基本解决方案:
viewFile : function( fileItem ) {
var xhr = new XMLHttpRequest(), token, contentType, filename;
xhr.onreadystatechange = function() {
token = xhr.getResponseHeader( "X-Token" );
if( token !== undefined && token !== null ){
app.model.set( "token", token );
sessionStorage.token = token;
}
if ( xhr.readyState === 4 ) {
contentType = xhr.getResponseHeader( "Content-Type" );
filename = xhr.getResponseHeader( "X-Filename" );
response = xhr.response;
var blob = new Blob([xhr.response], { type: contentType } );
saveAs( blob, filename );
}
};
xhr.open( 'GET', "/index.cfm/api/filelocker/" + fileItem.fileid, true );
xhr.responseType = "arraybuffer";
xhr.setRequestHeader ( "X-Token", app.model.get( "token" ) );
xhr.send();
}
此技术使用现有的身份验证机制。我来看看它对大文件的处理效果如何 这听起来像是个XY问题。您的用例是什么?也许是的,让我重申一下问题。正常登录和只允许经过身份验证的用户下载有什么问题?@PeeHaa它就是这样做的,但是当前的身份验证机制在每个请求的http请求头中使用一个令牌,因此我需要使用现有的机制,这将与我正在研究的两个选项之一一起工作,或者使用其他功能扩展当前机制。