скачать корпоративный актив GitHub с помощью HTML-якоря <a>или javascript - PullRequest
0 голосов
/ 29 января 2019

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

Я создал токен доступа, abcd1234.

Я пытался связать релиз с идентификатором в html, который не работает

<a href="https://git.myCompany.com/api/v3/repos/myOrg/myRepo/releases/assets/123?access_token=abcd1234" download="file.exe" type="application/octet-stream">
    Download
</a>

Я также пытался связать напрямую с ресурсом, который запрашивает экран входа пользователя (нежелательно)

<a download href="https://git.myCompany.com/myOrg/myRepo/releases/download/v1.0/myApp-1.0.exe?access_token=abcd1234">
    Download
</a>

И я также попытался обработать загрузку в js, которой я не смог управлять.

<a download onclick="downloadAsset()">
    Download
</a>
window.downloadAsset = function () {
    const url = 'https://git.myCompany.com/api/v3/repos/myOrg/myRepo/releases/assets/123';

    const options = {
        headers: { 
            Authorization: 'token abcd1234',
            Accept: 'application/octet-stream'
        }
    };

    fetch(url, options)
        .then(response => response.blob())
        .then(data => {
            // Save blob data as file
        });
};

Как это может бытьбез внутреннего прокси-сервера?

Ответ на вызов fetch приводит к 302, на который я могу нажать в консоли браузера, и файл начинает загружаться, но он блокируется из-за CORS из githubнесмотря на заголовок аутентификации.

1 Ответ

0 голосов
/ 29 января 2019

Вы можете попытаться отключить CORS внутри fetch предложения:

window.downloadAsset = function () {
    const url = 'https://git.myCompany.com/api/v3/repos/myOrg/myRepo/releases/assets/123';

    const options = {
        headers: { 
            Authorization: 'token abcd1234',
            Accept: 'application/octet-stream'
        }, 
        method: 'get', 
        mode: 'no-cors'
    };

    fetch(url, options)
        .then(response => response.blob())
        .then(data => {
            // Save blob data as file
        });
};

Также вы можете попробовать принять CORS внутри выборки:

window.downloadAsset = function () {
    const url = 'https://git.myCompany.com/api/v3/repos/myOrg/myRepo/releases/assets/123';

    const options = {
        headers: { 
            Authorization: 'token abcd1234',
            Accept: 'application/octet-stream'
            'Access-Control-Allow-Origin':'*'
        }, 
        method: 'get', 
        mode: 'cors'
    };

    fetch(url, options)
        .then(response => response.blob())
        .then(data => {
            // Save blob data as file
        });
};

Другой способ: Вы можете попробоватьдобавьте этот PHP-код в начало вашего HTML-файла для принятия перекрестного происхождения:

<?php header('Access-Control-Allow-Origin: *'); ?>

В любом случае, лучший вариант - это принять CORS в конце

Два возможных решения для серверной части:

  • Если вы используете файл node.js: файл node.js: response.writeHead (200,{'Content-Type': contentType, 'Access-Control-Allow-Origin': '* *})

  • Если вы используете Apache : в настройках(как первый вариант), добавьте эту директиву: Набор заголовков Access-Control-Allow-Origin *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...