2014-04-12 99 views
0

因缺乏找到一个下载管理器,我喜欢在Ubuntu的词干远程文件,我想知道是否有可能创建一个使用HTML5和JavaScript在浏览器中提供的新文件API之一。目前,我正在研究一个概念证明,它将从远程URL下载一个小文件(Google徽标)到沙盒文件系统中。下面的代码:下载使用JavaScript文件API

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(); 

这似乎是它会工作给我,但是运行时,它不会让我谷歌的LOGO下载由于Access-Control-Allow-Origin

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

我需要保持这种100%的客户端也,我不能用类似的PHP流的文件给客户或任何东西。

回答

1

XMLHttpRequest只能在当前域中,除非你使用CORS

既然你在谷歌的服务器没有控制,你不能使用它,所以哟不能从您的域名访问谷歌的文件。

当然,你总是可以使用XMLHttpRequest从你的服务器,它连接到谷歌和输出所需的文件中获取的文件。

+0

另请参阅[绕过同源策略的方法](http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy) – Oriol

+0

好的,所以使用AJAX请求那么,因为我不能依赖允许我使用它的域,我也不能有服务器端解决方案。有没有其他方法可以在不使用AJAX的情况下将文件下载到Chrome的沙箱存储中? –

+0

@ChrisWhite为了将任何内容保存到Chrome的存储中,您必须拥有要保存的数据。如果数据来自服务器中的文件,则必须使用AJAX来获取它。 – Oriol