使用Javascript文件API下载远程文件
由于在Ubuntu上找不到我喜欢的下载管理器,我想知道是否有可能使用HTML5和JavaScript以及Chrome提供的新文件API创建一个下载管理器。目前我正在做一个概念验证,它将从一个远程URL下载一个小文件(Google的徽标)到沙盒文件系统中。代码如下:使用Javascript文件API下载远程文件,javascript,access-control,fileapi,Javascript,Access Control,Fileapi,由于在Ubuntu上找不到我喜欢的下载管理器,我想知道是否有可能使用HTML5和JavaScript以及Chrome提供的新文件API创建一个下载管理器。目前我正在做一个概念验证,它将从一个远程URL下载一个小文件(Google的徽标)到沙盒文件系统中。代码如下: window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; function onError(e) { co
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
function onError(e) {
console.log('Error:', e)
}
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.google.co.uk/images/srpr/logo11w.png', true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
window.requestFileSystem(TEMPORARY, 1024*1024, function(fs) {
fs.root.getFile('google.png', {create: true}, function(fileEntry) {
fileEntry.createWriter(function(writer) {
var blob = new Blob([xhr.response], {type: 'image/png'});
writer.write(blob);
}, onError);
}, onError);
}, onError);
}
xhr.send();
这对我来说似乎是可行的,但是在运行时,由于Access Control allow Origin
,它不允许我下载谷歌的徽标
由于这是一个相对较新的方法,我还没有找到使用新的文件API函数实现所需功能的最佳方法,因此我甚至不确定使用AJAX请求是否是最好的方法。如果没有,我愿意接受建议。否则,是否有办法绕过访问控制允许原点问题
我还需要保留这个100%客户端,我不能使用PHP之类的东西将文件流式传输到客户端或其他任何东西。仅在当前域中有效,除非您使用
因为你不能控制谷歌的服务器,你不能使用它,所以你不能从你的域访问谷歌的文件
当然,您可以始终使用XMLHttpRequest
从您的服务器获取一个文件,该服务器连接到Google并输出所需的文件。也可以,因此使用AJAX请求是不可能的,因为我不能依赖允许我使用它的域,而且我也没有服务器端解决方案。有没有其他方法可以在不使用AJAX的情况下将文件下载到Chrome的沙盒存储中?@ChrisWhite为了将任何内容保存到Chrome的存储中,您必须拥有要保存的数据。如果数据来自服务器中的文件,则必须使用AJAX来获取数据。