Aison
@Aison

Как сохранить картинку на пк используя кнопку JS?

Пишу расширение для браузера так, как устал тыкать мышкой. Хочу, чтобы при нажатии кнопки сохранаялась картинка как, если бы я нажал "ПКМ" > "Сохранить как".

Как можно реализовать? Проблема в том, что мне нужно сохранить оригинальное имя файла. Если я сохраняю при помощи контексного меню браузера, то всё норм, но если при помощи атрибута download (html5) то имя картинки берётся из url со всеми кракозябрами. В общем, нужно имитировать "ПКМ" > "Сохранить как".

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

Набросал код.
Открываю ссылку при помощи простого условия, но нужно помимо этого сохранить картинку. Сама картинка хранится в img src. Есть идеи или браузер не позволит?

document.body.addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 48) {
        document.getElementById("eID").click();
		//console.log('Save original .JPG image');
    }
});
  • Вопрос задан
  • 365 просмотров
Решения вопроса 2
@GrayHorse
Например:

const url = "https://i.imgur.com/sduLRvf.jpeg";
const resp = await fetch(url);
const blob = await resp.blob();
const name = url.split("/").pop().replace("jpeg", "jpg");

downloadBlob(blob, name, url);

function downloadBlob(blob, name, url) {
    const anchor = document.createElement("a");
    anchor.setAttribute("download", name || "");
    const blobUrl = URL.createObjectURL(blob);
    anchor.href = blobUrl + (url ? ("#" + url) : "");
    anchor.click();
    setTimeout(() => URL.revokeObjectURL(blobUrl), 3000);
}


Можешь даже в консоли на этом сайте запустить — скачается.

url параметр опциональный, чисто чтобы сохранить возможность посмотреть оригинальный URL в менеджере загрузок.
Ответ написан
Aison
@Aison Автор вопроса
Понадобилось обойти также защиту браузера. CORS - обошёл при помощи этого асширения Всем спасибо!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы