Показать сообщение отдельно
  #2 (permalink)  
Старый 10.05.2012, 17:38
Профессор
Отправить личное сообщение для lamer Посмотреть профиль Найти все сообщения от lamer
 
Регистрация: 08.02.2012
Сообщений: 216

Нашел вариант с использованием 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-Request, если вы имеете доступ к скрипту loader.php на другом сервере, то есть возможность правильно заполнить Cross-Origin заголовки и тогда все запуститься само
Читал про crossdomain.xml прописывал заголовки:
<cross-domain-policy>
<allow-access-from domain="*" to-ports="80"/>
</cross-domain-policy>


Все равно так и висит строка Идет загрузка файла

Помогите пожалуйста разобраться.
Ответить с цитированием