Использование JSZip с веб-сайта для загрузки файла из хранилища BLOB-объектов Azure

Я храню некоторый видеоконтент в хранилище BLOB-объектов Azure. Когда пользователь нажимает кнопку на веб-сайте, я хочу сжать этот видеофайл и заставить его скачать его. URL-адрес, который я даю в качестве входных данных, является прямым URL-адресом файла Azure BLOB-объекта, например: https://xxxxx.blob.core.windows.net/user-content/yyyy.mp4. Когда я запускаю приведенный ниже код, я получаю сообщение об ошибке:

XMLHttpRequest не может загрузить https://xxxxx.blob.core.windows.net/user-content/yyyy.mp4. В запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Поэтому происхождение ' http://xxx.yyy.io/' не разрешено.

page-project.js: 2810 Uncaught Ошибка: InvalidStateError: Не удалось прочитать свойство responseText из "XMLHttpRequest": значение доступно только в том случае, если "responseType" объекта является "" или "text" (был "arraybuffer"). в XMLHttpRequest.xhr.onreadystatechange (jszip-utils.js:93)

Когда я получаю доступ к URL-адресу блоба прямо в браузере, я могу загрузить файл. Я даже включил CORS в Azure BLOB-объекте, чтобы разрешить запросы от любого источника и все заголовки все еще я получаю ошибку. Как это решить? Или есть какой-то другой способ сделать ту же функциональность?

JS CODE:

function download(url){ 
var zip = new JSZip();
var zipFilename = "downloadvideo.zip";


JSZipUtils.getBinaryContent(url, function (err, data) {
     if(err) {
        throw err; // or handle the error
     }
     try {
        JSZip.loadAsync(data).then(function () {
            zip.file(url, data, {binary:true});
            zip.generateAsync({type:'blob'}).then(function(content) {
                saveAs(content, zipFilename);
            });
        });  
    }
    catch(e) {
        showError(e);
    }
    });
}

1 ответ

Согласно вашему описанию, я полагаю, вы могли бы перепроверить, что вы уже включили настройку CORS для хранилища Azure, а не таблицу / файл.

Если вы уже установили двоичный объект CORS, я предлагаю попробовать удалить его и сбросить заново.

Изображение как это:

Мои настройки:

Я также создал тестовую демонстрацию в соответствии с вашими кодами, после установки CORS я мог загрузить файл.

Результат:

Другие вопросы по тегам