Как скачать файлы с помощью js?

110
29 июня 2019, 09:40

Я авторизуюсь на сайте из IE. Как скачать файл через консоль браузера? Пробую следующий сниппет - выдается ошибка. По сути действие js-кода аналогично сохранению файла вручную. Такое ощущение что js-качает сам по себе, а не использую куки браузера.

https://www.gosuslugi.ru/api/lk/v1//orders/428297648/history/1083114266/files/SUxT/download 401 (Unauthorized)

...

function download(url, fileName) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'blob';
    xhr.onprogress = function(event) {
        if (event.lengthComputable) {
            var percentComplete = (event.loaded / event.total)*100;
            //yourShowProgressFunction(percentComplete);
        } 
    };
    xhr.onload = function(event) {
        if (this.status == 200) {
            _saveBlob(this.response, fileName);
        }
        else {
            //yourErrorFunction()
        }
    };
    xhr.onerror = function(event){
        //yourErrorFunction()
    };
    xhr.send();
}

function _saveBlob(response, fileName) {
    if(navigator.msSaveBlob){
        //OK for IE10+
        navigator.msSaveBlob(response, fileName);
    }
    else{
        _html5Saver(response, fileName);
    }
}
function _html5Saver(blob , fileName) {
    var a = document.createElement("a");
    document.body.appendChild(a);
    a.style = "display: none";
    var url = window.URL.createObjectURL(blob);
    a.href = url;
    a.download = fileName;
    a.click();
    document.body.removeChild(a);
}
Answer 1

Что такое 401 ошибка:

Код ответа на статус ошибки HTTP 401 Unauthorized клиента указывает, что запрос не был применен, поскольку ему не хватает действительных учетных данных для целевого ресурса.

То есть файл который вы хотите получить, блокируется ресурсом т.к. он думает что вы неавторизованный пользователь, аноним.

Вам нужно передавать данные об авторизации в Header (Заголовке запроса). Методом XMLHttpRequest.setRequestHeader()

xhr.setRequestHeader('Authority', '_ТОКЕН_АВТОРИЗАЦИИ');

READ ALSO
Node-mysql не работает со строчными значениями

Node-mysql не работает со строчными значениями

Нужно выбрать строку из бд, если использовать производить выборку по числовому столбцу то все прекрасно работает, но если по столбцу со строкой...

125
GROUP BY по части поля. Возможно ли?

GROUP BY по части поля. Возможно ли?

Хочу командой GROUP BY сделать группировку, по полю title, но по значению ДО первого пробела

127
Ошибка при попытке входа в phpMyAdmin

Ошибка при попытке входа в phpMyAdmin

Открываю http://localhost/Tools/phpMyAdmin/

140
Скроллинг по секциям [закрыт]

Скроллинг по секциям [закрыт]

Есть сайт на котором должен быть скролл по секциям, наподобие вертикального слайдера и если контент в секции больше высоты экрана он должен...

116