Javascript.RU

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

Загрузка файла на другой сервер средствами iframe
Здравствуйте.
Появилась необходимость загружать файлы на второй сервер принимая их на первом.
т.е. юзер загружает файл на server-1, а файл загружается на server-2

Читал что можно подобное реализовать без перезагрузки страницы методом Remote Scripting используя iframe. Но конкретных примеров с подробным описанием так и не нашел.

Может кто то встречал в инете и может кинуть линк или выложить в топе с подробным описанием ? Думаю полезно было бы не только мне.
Заранее спасибо.
Ответить с цитированием
  #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>


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

Помогите пожалуйста разобраться.
Ответить с цитированием
  #3 (permalink)  
Старый 10.05.2012, 18:34
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

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

Сообщение от dmitriymar Посмотреть сообщение
что мешает организовать взаимодействие на серверной стороне если доступ есть к обоим серверам?
Серверную часть с server-1.com трогать не льзя, там простейший хост, на нем можно организовывать только клиентскую часть, а серверную на server-2.com

В прицепе то что выложил я выше работает, не возвращается только ответ от сервера, чтоб юзер видел что загрузка завершена.

Можете подсказать решение ?
Ответить с цитированием
  #5 (permalink)  
Старый 10.05.2012, 20:42
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от lamer
Можете подсказать решение ?
да ктож знает что туда разработчика понатыкали
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с загрузкой файла на сервер shkarbatov Серверные языки и технологии 8 13.08.2011 01:27
загрузка файла на сервер с помощью MSXML2.XMLHTTP asdasd AJAX и COMET 0 15.07.2011 01:30
загрузка файла через скрытый iframe и потеря связи с сервером vahrusha AJAX и COMET 5 01.06.2011 14:43
Отправка файла на сервер асинхронно DDestroy Internet Explorer 0 09.03.2011 12:10
Загрузка файла без использования формы Slavenin AJAX и COMET 20 12.12.2010 12:41