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
Форумы портала PHP.SU :: Версия для печати :: Передача файлов через ajax
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Передача файлов через ajax

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

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

но мне интересно можно ли через ajax передать файл также, как это делается без ajax, то есть, чтобы на сервере работать с файлом, как-будто он прислан через обычный запрос, а не через ajax, а именно работать через массив $_FILES и ф-цию move_uploaded_file()
2. Arni - 02 Августа, 2011 - 20:00:09 - перейти к сообщению
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 тут нужен только для того чтобы создать анимированные игрушки вида подождите ваш файл загружается или индикатор хода процесса ну и.т.д.
3. Pavelbeginner - 02 Августа, 2011 - 20:16:44 - перейти к сообщению
Ну во-первых данный код приведет к перезагрузке страницы, по-моему, т.к. форма находится не внутри фрейма. Ну да не суть, как важно. Такой подход я и сам бы придумал. Но фреймы - прошлый век. Даже пусть не прошлый век, но мне интересен сам факт возможности передачи файлов через ajax, возможно ли это, то есть можно ли передать как-то файл через ajax, чтобы потом с ним работать, как с файлом, переданным обычным способом, без ajax.
4. DeepVarvar - 02 Августа, 2011 - 20:17:48 - перейти к сообщению
Pavelbeginner пишет:
передачи файлов через ajax, возможно ли это
Нет не возможно.
5. Arni - 02 Августа, 2011 - 20:22:48 - перейти к сообщению
Pavelbeginner пишет:
Такой подход я и сам бы придумал.
Ну так вот, ничего лучше не придумали. И если разговаривать об AJAX глобально, то вам нужен flash.

С формой совершенно верно, это я на скорую руку повставлял все.
6. DeepVarvar - 02 Августа, 2011 - 20:32:04 - перейти к сообщению
Если только не напишете сами узко заточеный JS-скрипт.
Подробности тут: http://xmlhttprequest[dot]ru/
7. Arni - 02 Августа, 2011 - 20:35:15 - перейти к сообщению
DeepVarvar пишет:
Если только не напишете сами узко заточеный JS-скрипт.
Подробности тут: http://xmlhttprequest[dot]ru/


Еще никто за невидимый фрейм по морде не бил. За ссылку спасибо.
8. Razo21 - 04 Августа, 2011 - 12:18:14 - перейти к сообщению
DeepVarvar пишет:
Pavelbeginner пишет:
передачи файлов через ajax, возможно ли это
Нет не возможно.

возможно но ето называется ajaxUpload
9. DeepVarvar - 04 Августа, 2011 - 12:26:52 - перейти к сообщению
Razo21 читайте внимательнее что пишу
10. koras - 04 Августа, 2011 - 12:55:13 - перейти к сообщению
возможно и именно через ajax, http://habrahabr[dot]ru/blogs/javascript/120917/

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


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

http://www[dot]html5rocks[dot]com/en/tut[dot][dot][dot]s/file/dndfiles/
11. Arni - 04 Августа, 2011 - 12:58:31 - перейти к сообщению
koras пишет:
Только это технология XMLHttpRequest2 и работать она будет только на html5


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

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.  

 

Powered by ExBB FM 1.0 RC1