Загрузка файла на другой сервер средствами 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, время: 17:17. |