href ссылка на изображение скачать по клику



я генерирую обычные ссылки, такие как:<a href="/path/to/image"><img src="/path/to/image" /></a> в веб-приложение.



когда я нажимаю на ссылку, она отображает изображение на новой странице. Если вы хотите сохранить картинку, то нужно нажать на нее правой кнопкой мыши и выбрать "Сохранить как"



Я не хочу такого поведения, я хотел бы иметь окно загрузки выскакивает, когда я нажимаю на ссылку, это возможно только с html или javascript? Как?



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

628   10  

10 ответов:

<a download="custom-filename.jpg" href="/path/to/image" title="ImageName">
    <img alt="ImageName" src="/path/to/image">
</a>

Он еще не полностью поддерживается http://caniuse.com/#feat=download, но вы можете использовать с modernizr https://modernizr.com/download/?adownload-setclasses (под непрофильными обнаруживает) для проверки поддержки браузером.

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

<a href="/path/to/image" download="myimage"><img src="/path/to/image" /></a>

"myimage" имя файла для загрузки. Расширение будет добавлено автоматически пример

<a href="download.php?file=path/<?=$row['file_name']?>">Download</a>

скачать.php:

<?php

$file = $_GET['file'];

download_file($file);

function download_file( $fullPath ){

  // Must be fresh start
  if( headers_sent() )
    die('Headers Sent');

  // Required for some browsers
  if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');

  // File Exists?
  if( file_exists($fullPath) ){

    // Parse Info / Get Extension
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);

    // Determine Content Type
    switch ($ext) {
      case "pdf": $ctype="application/pdf"; break;
      case "exe": $ctype="application/octet-stream"; break;
      case "zip": $ctype="application/zip"; break;
      case "doc": $ctype="application/msword"; break;
      case "xls": $ctype="application/vnd.ms-excel"; break;
      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
      case "gif": $ctype="image/gif"; break;
      case "png": $ctype="image/png"; break;
      case "jpeg":
      case "jpg": $ctype="image/jpg"; break;
      default: $ctype="application/force-download";
    }

    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers
    header("Content-Type: $ctype");
    header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$fsize);
    ob_clean();
    flush();
    readfile( $fullPath );

  } else
    die('File Not Found');

}
?>

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

Я нашел пример выполнения этого с помощью mod_rewrite, хотя я знаю, что есть путь проще.

попробуйте это...

<a href="/path/to/image" download>
    <img src="/path/to/image" />
 </a>

Если вы используете HTML5, вы можете добавить атрибут "загрузить" в свои ссылки.

<a href="/test.pdf" download>

http://www.w3schools.com/tags/att_a_download.asp

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

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

простой код для загрузки изображения с помощью щелчка по изображению с помощью php

<html>
<head>
    <title> Download-Button </title>
</head>
<body>
    <p> Click the image ! You can download! </p>
    <?php
    $image =  basename("http://localhost/sc/img/logo.png"); // you can here put the image path dynamically 
    //echo $image;
    ?>
    <a download="<?php echo $image; ?>" href="http://localhost/sc/img/logo.png" title="Logo title">
        <img alt="logo" src="http://localhost/sc/img/logo.png">
    </a>
</body>

загрузка изображения с помощью щелчка по изображению!

Я сделал этот простой код!:)

<html>
<head>
<title> Download-Button </title>
</head>
<body>
<p> Click the image ! You can download! </p>
<a download="logo.png" href="http://localhost/folder/img/logo.png" title="Logo title">
<img alt="logo" src="http://localhost/folder/img/logo.png">
</a>
</body>
</html>

есть простые 2 способа, чтобы избежать открытия любого файла вместо загрузки. 1.) Простое решение, которое является пуленепробиваемым, состоит в том, чтобы изменить имя расширения изображения на то, что браузер не понимает, например myimage.zzz Вы должны сказать своему посетителю, чтобы изменить расширение после загрузки, хотя. Возможно, это не так практично. 2.) Поместите изображение в zip, я обычно делаю это с файлами, которые я не хочу открывать сразу.

теги загрузки не работают сафари или IExplorer. Надеюсь, это поможет?

Comments

    Ничего не найдено.