Загрузите изображение с помощью JavaScript с другого сервера через AJAX

Я пытаюсь (если это возможно) сделать загрузку изображения, хранящегося на другом сайте (а не на компьютере), через JavaScript (разрешен jQuery) с запросом AJAX.

Допустим, что у нас есть изображение http://example.com/a.jpg . Мне нужно сделать запрос AJAX, отправив это изображение на сайт http://test.com/process.php .

  • Я не могу редактировать файл process.php чтобы принять что-либо, кроме действительного загруженного файла .
  • Поддержка браузеров не важна.

Возможно ли это? Из-за проблем с безопасностью мы можем динамически заполнять поле файла, поэтому, возможно, это еще один способ отправить файл без необходимости выбора файла.

Я думаю, что я должен использовать FormData , не уверен.

// Получение файла.

 var url = "http://example.com/a.jpg" var oReq = new XMLHttpRequest(); oReq.onload = function(e) { var blobData = oReq.response; // not responseText // Sending data. var formData = new FormData(); // JavaScript file-like object var blob = new Blob([blobData], { type: "image/jpeg"}); formData.append("webmasterfile", blob); var request = new XMLHttpRequest(); request.open("POST", "http://test.com/process.php"); request.send(formData); } oReq.open("GET", url, true); oReq.responseType = "blob"; oReq.send(); 

Ресурсы:

https://developer.mozilla.org/en-US/docs/Web/API/FormData/append

https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

Допустим, example.com показывает пользователю несколько изображений.

  • Пользователь нажимает изображение
  • Запрос GET отправляется на сервер (содержит параметр «изображение»)
  • Сервер делает запрос POST на test.com

Поэтому, если вы кодируете сервер в PHP, ваш код должен выглядеть так (или что-то вроде этого):

 <?php $image = $_GET['image']; // example.png $file = dirname(__FILE__).$image; // /var/www/example/assets/img/example.png $ch = curl_init(); $data = array('file' => $file); curl_setopt($ch, CURLOPT_URL, 'http://test.com/process.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); ?>