使用Javascript文件API下载远程文件

时间:2014-04-12 00:52:25

标签: javascript access-control fileapi

由于缺乏在Ubuntu上找到我喜欢的下载管理器,我想知道是否可以使用Chrome中提供的新File API使用HTML5和JavaScript创建一个。目前,我正在制作概念验证,只需将远程URL中的小文件(Google徽标)下载到沙盒文件系统中。代码如下:

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而无法下载Google的徽标。

由于这是相对较新的,我无法找到最佳方式来实现我想要的新文件API功能,所以我甚至不确定如果使用AJAX请求是最好的方法。如果没有,我愿意接受建议。否则,有没有办法解决Access-Control-Allow-Origin问题?

我还需要保留这个100%的客户端,我不能使用PHP之类的东西将文件流式传输到客户端或其他任何东西。

1 个答案:

答案 0 :(得分:1)

XMLHttpRequest仅适用于当前域,除非您使用CORS

由于您无法控制Google的服务器,因此您无法使用它,因此您无法访问您网域中的Google文件。

当然,您始终可以使用XMLHttpRequest从您的服务器获取文件,该文件连接到Google并输出所需的文件。