Кнопка загрузки одним щелчком мыши для gifhy gif - PullRequest
0 голосов
/ 18 января 2020

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

У школ W3 есть рабочий пример, запускающий загрузку: https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_a_download

Когда я изменяю URL-адреса изображения на все остальное, что он делает не запускает загрузку файла.

Например, этот код не запускает загрузку:

<a href="https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg/687px-Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg" download>

Может кто-нибудь объясните почему?

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Проблема того, почему он не работает, заключается в том, что атрибут download работает только для URL-адресов того же происхождения. Вы можете найти подробности здесь Документы MDN

Что касается альтернативы, вы можете использовать примерно такой javascript, чтобы добиться того же.

function download_img(e,link){
var image = new Image();
image.crossOrigin = "anonymous";
image.src = link;
image.onload = function () {
    var canvas = document.createElement('canvas');
    canvas.width = this.naturalWidth; // or 'width' if you want a special/scaled size
    canvas.height = this.naturalHeight; // or 'height' if you want a special/scaled size
    canvas.getContext('2d').drawImage(this, 0, 0);
    var blob;
    // ... get as Data URI
    if (image.src.indexOf(".jpg") > -1) {
    blob = canvas.toDataURL("image/jpeg");
    } else if (image.src.indexOf(".png") > -1) {
    blob = canvas.toDataURL("image/png");
    } else if (image.src.indexOf(".gif") > -1) {
    blob = canvas.toDataURL("image/gif");
    } else {
    blob = canvas.toDataURL("image/png");
    }
    tempbtn = document.createElement('a');
    tempbtn.href = blob;
    tempbtn.download = 'image.jpg'; // or define your own name. 
    tempbtn.click();
    tempbtn.remove(); 
};
}
<!DOCTYPE html>
<html>
<body>

   
<a href="#" onclick="download_img(this,'https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg/687px-Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg')"  >Download image
</a>

<p><b>Note:</b> The download attribute is not supported in Edge version 12, IE, Safari 10 (and earlier), or Opera version 12 (and earlier).</p>
 
</body>
</html>
0 голосов
/ 18 января 2020

В примере w3schools, который вы приложили, текст ссылки, по которой вы должны нажать, чтобы начать загрузку, является изображением. Они поместили изображение внутри тега привязки (<a></a>), а затем дали URL-адрес href attr привязки. Затем, если вы измените href, URL изменится без изменения изображения, и вы можете начать загрузку, нажав на изображение.

в коде, который вы прикрепили к вашему вопросу (который работает и загрузите изображение в виде файла, если вы добавите </a> в его конец.), вы дадите URL изображения как href attr. Так что если вы измените href, другой файл будет загружен.

<a href="https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg/687px-Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg" download>click</a>

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

<a href="" download>
  <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg/687px-Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg" alt="image" width="100" />
</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...