Загрузка удаленных файлов с помощью файлового API Javascript

Из-за отсутствия менеджера загрузки, который мне нравится в Ubuntu, мне было интересно, можно ли создать его с помощью HTML5 и JavaScript с новым File API, доступным в Chrome. В настоящее время я работаю над доказательством концепции, которая просто загрузит небольшой файл (логотип Google) с удаленного URL-адреса в файловую систему песочницы. Код ниже:

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

Мне кажется, что это сработает, однако при запуске я не могу загрузить логотип Google из-за Access-Control-Allow-Origin.

Из-за того, что это относительно новое, я не смог найти лучший способ добиться того, чего я хочу, используя новые функции файлового API, поэтому я даже не уверен, что использование запроса AJAX является лучший способ сделать это. Если нет, я открыт для предложений. В противном случае, есть ли способ обойти проблему Access-Control-Allow-Origin?

Мне также нужно сохранить эту 100% клиентскую сторону, я не могу использовать что-то вроде PHP для потоковой передачи файла клиенту или что-то еще.


person John Dorean    schedule 12.04.2014    source источник


Ответы (1)


XMLHttpRequest работает только в текущем домене, если вы не используете CORS.

Поскольку у вас нет контроля над сервером Google, вы не можете его использовать, поэтому вы не можете получить доступ к файлам Google из своего домена.

Конечно, вы всегда можете использовать XMLHttpRequest для получения файла с вашего сервера, который подключается к Google и выводит нужный файл.

person Oriol    schedule 12.04.2014
comment
Хорошо, тогда использование запроса AJAX исключено, поскольку я не могу полагаться на домен, позволяющий мне его использовать, и у меня также нет решения на стороне сервера. Есть ли другой способ загрузить файл в хранилище песочницы Chrome без использования AJAX? - person John Dorean; 12.04.2014
comment
@ChrisWhite Чтобы сохранить что-либо в хранилище Chrome, у вас должны быть данные, которые вы хотите сохранить. И если эти данные поступают из файла на сервере, вы должны использовать AJAX для их получения. - person Oriol; 12.04.2014