TCS54321 Ответов: 1

Как скачать файл изображения из кросс домена


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

вот мой код :-

<a href="http://localhost:51255/images/test.png" target="_blank" download="1500C.png"> download image</a>


может ли кто-нибудь подсказать мне решение?

Что я уже пробовал:

я пытаюсь это сделать с помощью javascript но получаю ошибки связанные с междоменными ошибками:-

function forceDownload(url, fileName) {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
    xhr.responseType = "blob";
    xhr.onload = function () {
        var urlCreator = window.URL || window.webkitURL;
        var imageUrl = urlCreator.createObjectURL(this.response);
        var tag = document.createElement('a');
        tag.href = imageUrl;
        tag.download = fileName;
        document.body.appendChild(tag);
        tag.click();
        document.body.removeChild(tag);
    }
    xhr.send();
}

1 Ответов

Рейтинг:
2

Richard Deeming

То Access-Control-Allow-Origin заголовок ответ заголовок, а не а запрос заголовок. Он должен быть установлен сайтом, с которого вы пытаетесь загрузить файл. Если бы вы могли переопределить его с помощью заголовка запроса, он не служил бы никакой цели.
Совместное использование ресурсов между источниками (CORS) - HTTP | MDN[^]

Ссылка для загрузки не будет работать для запросов кросс-происхождения, если только другой сервер не отправит Content-Disposition: attachment заголовок с ответом. Опять же, это из соображений безопасности.
Стандарт HTML - 4.6.5 загрузка ресурсов[^]

Вам нужно будет сделать запрос изображения с вашего сервера, а не из клиентского кода. Затем вы можете отправить его обратно клиенту с соответствующими заголовками, чтобы он загружался, а не открывался в браузере.