Создавать кнопку, чтобы загружать внешние изображения

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

Признак download HTML5 оно не функционирует во всех браузерах. Какая-то альтернатива существует с языком сценариев JavaScript?.

17
задан 14.10.2016, 01:47
5 ответов
  • Используя HTML5 обрежь использовать признак" download "

    <a href="http://static.hogarmania.com/archivos/201204/estrenimiento-gato-bebe2-xl-668x400x80xX.jpg" download="cute.jpg">
      <img src="http://static.hogarmania.com/archivos/201204/estrenimiento-gato-bebe2-xl-668x400x80xX.jpg" width="250" />
    </a>
    

Demo: https://jsfiddle.net/Socramg/1o9oec7r /

  • Используя JS jQuery )

    $('a[download]').each(function() {
      var $a = $(this),
          fileUrl = $a.attr('href');
    
      $a.attr('href', 'data:application/octet-stream,' + encodeURIComponent(fileUrl));
    });
    

Demo: https://jsfiddle.net/Socramg/1o9oec7r/1 /

18
ответ дан 24.11.2019, 13:08
  • 1
    К сожалению этот признак не вынесен всеми браузерами caniuse.com/#feat=download – Jose Paredes 13.10.2016, 13:56
  • 2
    Функционируй с Chrome и Edge, но не функционирует разряд im и # 225; гены с firefox оставшаяся часть файлов функционирует правильно. – Edwin V 14.10.2016, 00:31

То, что ты можешь делать, с PHP первым состоит в том, чтобы копировать изображение в сервер и despuГ©s загружать ее, например:

$rutaImagenExterna = 'http://static.hogarmania.com/archivos/201204/estrenimiento-gato-bebe2-xl-668x400x80xX.jpg';
$rutaImagenLocal = 'mis_imagenes/cat.jpg';

// Opción 1 necesitas habilitar allow_url_fopen & PHP5+
copy($rutaImagenExterna, $rutaImagenLocal);

// Opción 2
$content = file_get_contents($rutaImagen);
$fp = fopen($rutaImagenLocal, 'w');
fwrite($fp, $content);
fclose($fp);

сейчас загружать для нее ты можешь использовать этот cГіdigo

header('Content-disposition: attachment; filename='.$rutaImagenLocal);
header('Content-type: image/jpeg');
readfile('cat.jpg');
5
ответ дан 24.11.2019, 13:08
  • 1
    Чтобы избегать того, чтобы твой сервер наполнился изображениями, после readfile('cat.jpg') возможно добавлять unlink($rutaImagenLocal) и с этим он удалит ее. Это не значит, что возможно удалять папку mis_imagenes из $rutaImagenLocal, эта папка всегда должна существовать, чтобы мочь копировать изображение с url, но если он удалит изображение, которое пользователь загрузил. – Leonardo Henao 20.08.2019, 09:54

Это пример это два файла PHP и HTML

Descarga.php

<?php
    if (!isset($_GET['archivo']) || empty($_GET['archivo'])) {
       exit();
    }

    $archivo = basename($_GET['archivo']);

    $ruta = 'archivos/'.$archivo;

    if (is_file($ruta))
    {
       header('Content-Type: application/force-download');
       header('Content-Disposition: attachment; filename='.$archivo);
       header('Content-Transfer-Encoding: binary');
       header('Content-Length: '.filesize($ruta));

       readfile($ruta);
    }
    else
       exit();
    ?>

и только посредством линии в html ты это называешь

  <a href="descarga.php?archivo=direccion.extension" class="btn btn-buynow">Descargar</a>
1
ответ дан 24.11.2019, 13:08
  • 1
    Уже prob и # 233; с этим, но оно не функционирует, так как im и # 225; гены est и # 225; n на внешнем сервере – Edwin V 14.10.2016, 01:59

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

0
ответ дан 24.11.2019, 13:08
  • 1
    Привет @Carles. и #161; Bienvendo в Стакк Оверфлов в espaГ±ol и спасибо за способствование! Quiz и # 225; s я заинтересовал тебя реализовывать , пробежавший ... М и # 225; s all и # 225; комплексности, которую он может находить, и #191; cu и # 225; l быть и # 237; в ответ на вопрос? Я комментирую тебе, что в сайте побуждаются ответы, что est и # 233; n м и # 225; s возможное повечерие. Может быть интересно тебе читать CГіmo отвечать . – Mariano 13.10.2016, 14:03
  • 2
    Привет, не s и # 233; в qu и # 233; приходит это. Давно в и # 241; вы, что я нахожусь в платформе, хотя уже давно, который я не отвечаю. У меня есть почти 15 в и # 241; вы опыта в programaci и # 243; n Веб и ответ, который я дал,, - под моей точкой зрения жизненной важности. В самом деле этот человек est и # 225; комментируемый, что он протестировал многие t и # 233; cnicas, и что они он не функционируют, следовательно возможно, что проблема не м и # 233; совсем а configuraci и # 243; n удаленного сервера, который справедливый, что я предлагаю ему. – Carles 17.10.2016, 09:21
  • 3
    Именно, как он ощущается, что это хороший ответ, я parec и # 237; в хорошую идею, которую ты разрабатывал бы с м и # 225; s деталь то, что ты говорил (по крайней мере, для будущего лектората, так как автор acept и # 243; другой ответ). Я верю в то, что " est и # 225; запрещенная в каких-то м и # 225; хина " podr и # 237; чтобы определять qu и # 233; он относится друг к другу, или по крайней мере комментировать какие-то случаи. – Mariano 17.10.2016, 10:31

Ты можешь делать это с языком сценариев JavaScript программной формы этой формы:

var ruta = 'http://jmri.org/images/ico-java.png';

var enlace = document.createElement('a');

enlace.href = ruta;

enlace.download = ruta;

document.body.appendChild(enlace);

enlace.click();

//Borrrar el elemento
enlace.parentNode.removeChild(enlace);

Также ты можешь загружаться используя PHP следующей формы:

<?php

$ruta= "http://jmri.org/images/ico-java.png"; 

header("Content-Description: File Transfer"); 
header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename='" . basename($ruta) . "'"); 

readfile ($ruta); 

?>


Saludos.
0
ответ дан 24.11.2019, 13:08