@Valeriy1997

Как скачивать изображения с других сайтов?

Есть ли решение загрузки изображений из веб ресурсов по url, и их дальнейшего сохранения. Суть в том , чтоб изображения сохранялись на клиенте.
  • Вопрос задан
  • 361 просмотр
Решения вопроса 3
@mr-molodoy
под "на клиенте" Вы подразумеваете браузер?

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

Можно по след. схеме:
Клиент <- Ваш сайта -> Сайт "жертва".

Т.е:
$.post('/getImages.php', {
     url: 'http://site.com/images/image.jpg'
}, function (data) {
    // Сохраняем изображения
    // Правда признаюсь - это извращение ;)
}, 'JSON');


<?php
     $url = $_POST['url'];
     $filename = end('/', $url);
     $path = __DIR__ . '/images_cache/';

     file_put_contents($path . $filename, file_get_contents($url));

     json_encode([
          'image' => '/images_cache/' . $filename,
          'filename' => $filename
     ]);
Ответ написан
zenden2k
@zenden2k
PHP & C++ programmer
По-моему вам нужен XMLHttpRequest + FileSystem API

var fs = null;
window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.PERSISTENT, 2*1024*1024, function(f) {
    f = fs; 
    download(fs, "http://yourdomain.com/example.gif","example.gif",function(){/*success*/},function(){/*fail*/});
});

function download(fs,url,file,win,fail) {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', url);
  xhr.responseType = "blob";
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      if(xhr.status === 200){
        fs.root.getFile(file,{create:true},function(fileEntry){
          fileEntry.createWriter(function(writer){
            writer.onwriteend = win;
            writer.onerror = fail;
            writer.write(xhr.response);
          })
        },fail)
      } else {
        fail(xhr.status);
      }
    }
  };
  xhr.send();
  return xhr;
};
Ответ написан
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Можно покопать в сторону загрузки изображения по url в canvas, потом использовать toDataURL чтобы получить файл в base64, потом уже его сохранить через File API
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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