Я пытаюсь (если это возможно) сделать загрузку изображения, хранящегося на другом сайте (а не на компьютере), через 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 показывает пользователю несколько изображений.
Поэтому, если вы кодируете сервер в 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); ?>