Загрузка файла на другой сервер средствами iframe
Здравствуйте.
Появилась необходимость загружать файлы на второй сервер принимая их на первом. т.е. юзер загружает файл на server-1, а файл загружается на server-2 Читал что можно подобное реализовать без перезагрузки страницы методом Remote Scripting используя iframe. Но конкретных примеров с подробным описанием так и не нашел. Может кто то встречал в инете и может кинуть линк или выложить в топе с подробным описанием ? Думаю полезно было бы не только мне. Заранее спасибо. |
Нашел вариант с использованием iframe, все работает и файлы на другой сервер закачивает.
index.html на первом сервере - server-1.com <html> <head> <meta charset="utf-8"> <title>Облако тегов</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> function hideBtn(){ $('#upload').hide(); $('#res').html("Идет загрузка файла"); } function handleResponse(mes) { $('#upload').show(); if (mes.errors != null) { $('#res').html("Возникли ошибки во время загрузки файла: " + mes.errors); } else { $('#res').html("Файл " + mes.name + " загружен"); } } </script> </head> <body> <form action="http://server-2.com/uploads/upload.php" method="post" target="hiddenframe" enctype="multipart/form-data" onsubmit="hideBtn();"> <input type="file" id="userfile" name="userfile" /> <input type="submit" name="upload" id="upload" value="Загрузить" /> </form> <div id="res"></div> <iframe id="hiddenframe" name="hiddenframe" style="width:0px; height:0px; border:0px"></iframe> </body> </html> Файл upload.php на втором сервере - server-2.com <?php if(isset($_POST['upload'])){ //Список разрешенных файлов $whitelist = array(".gif", ".jpeg", ".png"); $data = array(); $error = true; //Проверяем разрешение файла foreach ($whitelist as $item) { if(preg_match("/$item\$/i",$_FILES['userfile']['name'])) $error = false; } //если нет ошибок, грузим файл if(!$error) { $folder = '.../uploads/';//директория в которую будет загружен файл $uploadedFile = $folder.basename($_FILES['userfile']['name']); if(is_uploaded_file($_FILES['userfile']['tmp_name'])){ if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadedFile)){ $data = $_FILES['userfile']; } else { $data['errors'] = "Во время загрузки файла произошла ошибка"; } } else { $data['errors'] = "Файл не загружен"; } } else{ $data['errors'] = 'Вы загружаете запрещенный тип файла'; } //Формируем js-файл $res = '<script type="text/javascript">'; $res .= "var data = new Object;"; foreach($data as $key => $value){ $res .= 'data.'.$key.' = "'.$value.'";'; } $res .= 'window.parent.handleResponse(data);'; $res .= "</script>"; echo $res; } else{ die("ERROR"); } ?> Но проблема в том что если передавать файлы на второй сервер то статус загрузки файла так и остается висеть: Идет загрузка файла хотя файл давно загружен на сервер. т.е. не получается без перезагрузки страницы получить ответ от второго сервера что файл загружен. Прочел на одном ресурсе: Цитата:
<cross-domain-policy> <allow-access-from domain="*" to-ports="80"/> </cross-domain-policy> Все равно так и висит строка Идет загрузка файла Помогите пожалуйста разобраться. |
что мешает организовать взаимодействие на серверной стороне если доступ есть к обоим серверам?
|
Цитата:
В прицепе то что выложил я выше работает, не возвращается только ответ от сервера, чтоб юзер видел что загрузка завершена. Можете подсказать решение ? |
Цитата:
|
Часовой пояс GMT +3, время: 22:35. |