Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Передача файлов через ajax

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Pavelbeginner
Отправлено: 02 Августа, 2011 - 19:26:51
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




Можно ли передавать файлы через ajax? То есть что-то наподобие обычного <input type="file">? Понятно, что можно сделать по-тупому:
1) прочесть содержимое файла в переменную.
2) отправить содержимое переменной через ajax
3) сохранить в файл на сервере содержимое

но мне интересно можно ли через ajax передать файл также, как это делается без ajax, то есть, чтобы на сервере работать с файлом, как-будто он прислан через обычный запрос, а не через ajax, а именно работать через массив $_FILES и ф-цию move_uploaded_file()
 
 Top
Arni
Отправлено: 02 Августа, 2011 - 20:00:09
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




AJAX (ˈeɪdʒæks, от англ. Asynchronous Javascript and XML — «асинхронный JavaScript и XML») — подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате, при обновлении данных, веб-страница не перезагружается полностью, и веб-приложения становятся более быстрыми и удобными.

http://ru[dot]wikipedia[dot]org/wiki/AJAX

Для того чтобы передать файл без перезагрузки страницы, js вообще не нужен, точнее нужен, но это штатные свойства форм отправки данных. И делается это так.

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <div class="upload-wrap">
  3.                       <form method="post" action="index.php" enctype="multipart/form-data" target="upload_target">
  4.                         <input type="file" title="Файл" size="32" name="main_img" class="alexa-autosend-data" />
  5.                       </form>  
  6. <iframe name="upload_target" src="#" class="iframe-ghost"></iframe>
  7.                 </div>
  8.  
  9.  


Это работает, и тут нету js, магии и AJAX. Единственное єто нужно для фрейма задать нулевые ширину и высоту, ну чтоб его видно не было.
И когда вы будете искать и качать плагины или библиотеки для загрузки файлов типа через AJAX, то знайте, почти всегда используется именно этот принцип. И js тут нужен только для того чтобы создать анимированные игрушки вида подождите ваш файл загружается или индикатор хода процесса ну и.т.д.

(Отредактировано автором: 02 Августа, 2011 - 20:02:45)

 
 Top
Pavelbeginner
Отправлено: 02 Августа, 2011 - 20:16:44
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




Ну во-первых данный код приведет к перезагрузке страницы, по-моему, т.к. форма находится не внутри фрейма. Ну да не суть, как важно. Такой подход я и сам бы придумал. Но фреймы - прошлый век. Даже пусть не прошлый век, но мне интересен сам факт возможности передачи файлов через ajax, возможно ли это, то есть можно ли передать как-то файл через ajax, чтобы потом с ним работать, как с файлом, переданным обычным способом, без ajax.
 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Августа, 2011 - 20:17:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Pavelbeginner пишет:
передачи файлов через ajax, возможно ли это
Нет не возможно.
 
 Top
Arni
Отправлено: 02 Августа, 2011 - 20:22:48
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




Pavelbeginner пишет:
Такой подход я и сам бы придумал.
Ну так вот, ничего лучше не придумали. И если разговаривать об AJAX глобально, то вам нужен flash.

С формой совершенно верно, это я на скорую руку повставлял все.

(Отредактировано автором: 02 Августа, 2011 - 20:23:41)

 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Августа, 2011 - 20:32:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Если только не напишете сами узко заточеный JS-скрипт.
Подробности тут: http://xmlhttprequest[dot]ru/
 
 Top
Arni
Отправлено: 02 Августа, 2011 - 20:35:15
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




DeepVarvar пишет:
Если только не напишете сами узко заточеный JS-скрипт.
Подробности тут: http://xmlhttprequest[dot]ru/


Еще никто за невидимый фрейм по морде не бил. За ссылку спасибо.

(Отредактировано автором: 02 Августа, 2011 - 20:35:32)

 
 Top
Razo21
Отправлено: 04 Августа, 2011 - 12:18:14
Post Id



Гость


Покинул форум
Сообщений всего: 91
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




DeepVarvar пишет:
Pavelbeginner пишет:
передачи файлов через ajax, возможно ли это
Нет не возможно.

возможно но ето называется ajaxUpload
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Августа, 2011 - 12:26:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Razo21 читайте внимательнее что пишу

(Отредактировано автором: 04 Августа, 2011 - 12:27:34)

 
 Top
koras
Отправлено: 04 Августа, 2011 - 12:55:13
Post Id



Частый гость


Покинул форум
Сообщений всего: 224
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




возможно и именно через ajax, http://habrahabr[dot]ru/blogs/javascript/120917/

Только это технология XMLHttpRequest2 и работать она будет только на html5


Особенно стоит почитать здесь

http://www.html5rocks.com/en/tutorials/file/dndfiles/

(Отредактировано автором: 04 Августа, 2011 - 12:55:35)

 
 Top
Arni
Отправлено: 04 Августа, 2011 - 12:58:31
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




koras пишет:
Только это технология XMLHttpRequest2 и работать она будет только на html5


Ну короче будем использовать эту возможность через много много лет пока не раздуплится Макйкрософт со своим ишаком тупорылым.
 
 Top
illy
Отправлено: 05 Августа, 2011 - 10:06:06
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




вот типа аякса Ха-ха

photo.html
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <font id=image_list></font>
  3. <br>
  4. <form id=sp target=p_a action=p_a.php method=POST enctype="multipart/form-data">
  5. <font>Фото:</font>
  6. <input id=gfile type=File name=ufile size=20>
  7. <input type=hidden name=act value=upf>
  8. &nbsp;&nbsp;<a class=ai href="javascript:with(document.getElementById('sp')){submit()}"> Загрузить </a>
  9. </form>
  10.  
  11. <iframe name=p_a frameborder=0 src=p_a.php width=0 height=0 scrolling=no></iframe>
  12.  


p_a.php

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $w=500; // Ширина уменьшеного фото
  4. $nh=375; // Высота уменьшеного фото
  5. $size=500; // Максимальный вес фото в киллобайтах, если её размеры меньше 500*375. Например, если грузят анимацию gif размером 50*35, но весит она 1мб
  6. $dir='Photo/'; // Папка для сохранения фото (не менять)
  7. $tt='Ваше фото по размерам меньше '.$w.'*'.$nh.', но весит больше '.$size.' кб';
  8.  
  9. $sd=strtolower($_FILES['ufile']['name']);
  10.  
  11. if ($_POST['act']=="upf" && $_FILES['ufile']['name']<>'' && (preg_match("/\.jpg$/",$sd) or preg_match("/\.png$/",$sd) or preg_match("/\.gif$/",$sd))) {
  12.  
  13. $s=GetImageSize($_FILES['ufile']['tmp_name']) or exit;
  14. $na=substr(time(),3,9).substr(sprintf('%.3f',microtime()),2,4);
  15. $t=preg_replace('/(.*)(.{4})$/','\2',$sd);
  16.  
  17. $sf=$_FILES['ufile']['size']/1024;
  18.  
  19. if($s[0]<=$w && $s[1]<=$nh && $sf<$size){
  20. copy($_FILES['ufile']['tmp_name'], $dir.$na.$t);
  21. echo "<script>parent.document.getElementById('image_list').innerHTML+=' $na$t';</script>";
  22. }
  23. if($s[0]<=$w && $s[1]<=$nh && $sf>$size){
  24. echo "<script>alert('".$tt."');</script>";
  25. }
  26.  
  27. $sn=$_FILES['ufile']['tmp_name'];
  28.  
  29. if(preg_match("/\.png$/",$sd)){
  30. }
  31. if(preg_match("/\.jpg$/",$sd)){
  32. }
  33. if(preg_match("/\.gif$/",$sd)){
  34. }
  35. $k=$s[0]/$w;
  36. $h=ceil($s[1]/$k);
  37. if($h>$nh){
  38. $kh=$h/$nh;
  39. $h=$nh;
  40. $w=ceil($w/$kh);
  41. }
  42. imageSaveAlpha($d,true);
  43. imagecopyresampled($d,$p,0,0,0,0,$w,$h,$s[0],$s[1]);
  44. imagejpeg($d,$dir.$na.'.jpg');
  45. echo "<script>parent.document.getElementById('image_list').innerHTML+=' $na.jpg';</script>";
  46. }
  47. else {exit;}
  48. ?>
  49.  


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB