powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Ajax загрузка файла на сервер
29 сообщений из 29, показаны все 2 страниц
Ajax загрузка файла на сервер
    #38503239
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Текстовые данные грузятся грузятся без проблем. А вот картинку как грузить?

HTML форма:
Код: html
1.
2.
3.
4.
5.
6.
7.
<form action="" enctype="multipart/form-data" method="POST">
   ///.........................................................
................................................................
.............................................................///

<input type='file' name='pictures[]' id='userfile_1'><input type='file' name='pictures[]' id='userfile_2'>
</form>



К странице пристёгиваю .js фаил
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
$(document).ready(function(e)
{	 
    $("#addPanel").

    $("#submit").click(function(){ 
		.....................................................................................


.....................................................................................................		
		$.ajax({ 
            url:"engine/saveNewSubject.php", 
		    type: 'get',
            data:{ category:rublic, city:current_city, rooms:current_rooms, c_float:current_float, t_float:total_flaot, place:place, age:age, mmad:mmad, price:price, lift:lift, parking:parking, cammon:cammon, boiler:boiler, furniture:furniture, free_time:free_time, arnona:arnona, vaad_bait:vaad_bait, title:title, bodyText:bodyText },
            success:function(print){
                alert(print);			
            } 
        }) 		
    });

});



ну и в файле /saveNewSubject.php

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
...........................................................................
...........................................................................
 foreach ($_FILES["pictures"]["error"] as $key => $error) {
        if ($error == UPLOAD_ERR_OK) {
            $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
            $name = $_FILES["pictures"]["name"][$key];
            move_uploaded_file($tmp_name, "foto/$name");
        }
    }



пытался в .js фаиле менять на type: 'post', - непомогло.

в чём может быть причина????
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38503280
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я такого не делал, у нас на работе для этого uploadify используется

да, а что если просто указать форме в качестве target невидимый iframe
и сделать ей обычный submit ?
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38503288
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на сайте размещаются рекламные обьявления а к ним иногда прилогаются фотою во и прашиваю как это с фджаксом подружить.

то что вы предлогаете както не удобоваримо получается!

Запрос проходит но в PHP файле я проверял print_r($_FILES); - показывает что пусто
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38503294
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в форме сделал обычный submit
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38503302
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Areostarа в форме сделал обычный submitвот и отлично
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38503356
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но почему тогда $_FILES - пустой приходит
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38503361
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enctype правильный
submit обычный, без всяких ajax

я не знаю почему $_FILES пустой
спросите на форуме по php, может там знают...
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38503370
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потомучто аякс не умеет передавать файлы. Ферштейн?
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38503639
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeПотомучто аякс не умеет передавать файлы. Ферштейн?Эээ... наверное ты имел ввиду XHR? Пост формы с файлом в ифрейм как бы еще никто не запрещал.
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38503891
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeПотомучто аякс не умеет передавать файлы. Ферштейн?
Как это не умеет, а как-же браузер передаёт?
Нужно всего-лишь самому сформировать структуру POST-запроса вместо браузера
(а это обычный текст со вставками-бинарными данными), можно даже перевести бинарные в формат base64 с помощью .readAsDataURL()

Для этого нужно знать как формировать POST-запрос, а именно:
- использовать разделитель границ передаваемых полей - boundary - так называемый уникальный "хеш".
- указывать Content-Type: multipart/form-data

Вот старый пример прямой передачи файла с ручным формированием POST-запроса на чистом JS:
9984722 ,
из которого можно даже убрать лишнее, и добавить, например, .readAsDataURL() - хотя есть нюансы, но они решаются.
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38503987
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asws,

Нихрена он не передаёт. Но, через задний проход можно сделать. Я даже штук десять примеров могу написать.
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504007
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,

Возможно, что-то не так у вас с сервером (слеши и т.д.) или с примером, я-же писал, что есть нюансы.
Но они решаемы, я несколько лет так делаю, любой POST стараюсь передавать именно таким образом, включая загрузку файлов.
Этото пример нуждается в доработке под конкретную ситуацию.

Для более расширенных действий, таких как прикрепление нескольких файлов и т.д.,
нужно почитать документацию по структуре POST - запроса - это всего-лишь обычный текст с границами-разделителями.
Разделители разделяют данные, а что это за данные (бинарные или текстовые), абсолютно неважно.

Например, я сталкивался с проблемой передачи рисунков в формате dase64 (с помощью .readAsDataURL() ) -
- у меня передаются корректно только jpeg-файлы.
Это нюансы, зависящие от способа обработки как на клииенте, так и на сервере.
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504015
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кроме варианта base64 есть ещё xhr2
у него 2 возможности: upload для единичного файла и FormData для формы.

но все эти вкусности не доступны в IE9-
так что скрытый фрейм - пока единственный универсальный вариант.
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504026
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aswsНапример, я сталкивался с проблемой передачи рисунков в формате base64 (с помощью .readAsDataURL() ) -
- у меня передаются корректно только jpeg-файлы.странно. весьма.
на этом форуме в "быстром ответе" есть передача base64 (если картинка драгндропнулась) - всё норм. работает, все форматы.
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504038
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечaswsНапример, я сталкивался с проблемой передачи рисунков в формате base64 (с помощью .readAsDataURL() ) -
- у меня передаются корректно только jpeg-файлы.странно. весьма.
на этом форуме в "быстром ответе" есть передача base64 (если картинка драгндропнулась) - всё норм. работает, все форматы.всё верно, но я не стал тогда разбираться, кто виноват - шаред-хостинг или код/браузер, так как клиенту была нужна админка для загрузки именно jpeg-файлов.
Но такая проблема возникала, так что у кого-то приведённый пример может заработать, у кого-то нет.

Смысл этого примера - показать, как может вручную формироваться POST-запрос.
В примере используется только часть возможностей, а можно делать полностью весь POST, включая заголовки,
то-есть использовать в конечном итоге только метод .send() браузера...
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504274
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот состряпал на коленке - передаёт корректно любые файлы через base64.
Просьба, для желающих проверить - отпишитесь пожалуйста, как работает.
В IE9 не могу сейчас посмотреть, но вроде в нём НЕ будет работать.
Используется обычный XMLHttpRequest, который позволяет передавать любые файлы без форм и iframe.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?php
 if (isset($_FILES['my_file'])) {
	$uploadfile = basename($_FILES['my_file']['name']);
	if (move_uploaded_file($_FILES['my_file']['tmp_name'], 'tmp')) {
	    $my_file=@file_get_contents('tmp');
		$pos=strpos($my_file,';base64,'); if(!$pos) { print 'error'; exit; }
		$my_file=base64_decode(substr($my_file,$pos+8)); // Вырезка служебных символов "data: ... ;base64,"
		$my_fh=fopen($uploadfile,'w'); if ($my_fh==False) { print 'error'; exit; }
		rewind($my_fh); if (-1==fwrite($my_fh,$my_file)) { print 'error'; fclose($my_fh); exit; }
		ftruncate($my_fh,ftell($my_fh)); fflush($my_fh); fclose($my_fh);
		print 'ok';
	} else {
		print 'error';
	}
	exit;
}
?>

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script type="text/javascript">
var my_reader=null, my_interval=null, my_queryHttp=0, my_HTTP=f_createXmlHttp(), my_file;

function f_upload() {
	var min=1000, max=2000000;
	my_file=document.getElementById("my_id_file").files;
	if (!my_file) { alert('Смените браузер на более новую версию, или на современный.'); return false; }
	my_file=my_file[0]; if (!my_file || !my_file.name) { alert('Укажите (выберите) файл'); return false; }
	if (my_file.size<min || my_file.size>max) { alert('размер файла вне допустимых размеров'); return false; }
	my_reader = new FileReader();
	my_reader.readAsDataURL(my_file); // содержимое любого файла в бинарном виде
	my_reader.onloadend=function(){
		var b=(Math.round(Math.random()*90000000)).toString(), r='--'+b+'\r\n', t;
		if	(!my_HTTP || my_queryHttp!=0) return;
		try
			{
				my_queryHttp=1;
				my_HTTP.open('POST','test2.php',true);
				my_HTTP.onreadystatechange=null;
				my_HTTP.setRequestHeader('Content-Type', 'multipart/form-data; boundary='+b);
				t = r+'Content-Disposition: form-data; name="my_file"; filename="'+my_file.name+'";\r\nContent-Type: '+my_file.type+'\r\n\r\n';
				t += my_reader.result+'\r\n'+'--'+b+'--\r\n';
				t = 'Content-Length: '+t.length+'\r\n\r\n'+t;
				my_HTTP.send(t);
			}
		catch (e) { my_queryHttp=0; alert('Ошибка. Не удалось отправить POST-запрос.'); }
	}
	my_interval=setInterval(function(){f_my_RequestStateChange();},100);

}

function f_my_RequestStateChange() { // здесь все небходимое для принятия ответа сервера
	var ret,st;
	try {
		if (my_HTTP.readyState==4)
		{
			st=my_HTTP.status;
			if (st==200)
			{
				ret=my_HTTP.responseText;
				if (ret=='ok') { alert("upload complete"); }
				if (ret=='error') { alert("upload error"); }
			} else alert('network error. status:'+st.toString());
			my_queryHttp=0; my_reader=null; if (my_interval) clearInterval(my_interval); my_interval=null;
		}
	}  catch (e) { my_reader=null; if (my_interval) clearInterval(my_interval); my_interval=null; alert('Ошибка приема ответа'); }
}

function f_createXmlHttp() {
	var i,v,x,a='MSXML2.',b='XMLHTTP';
	try	{ x=new XMLHttpRequest(); }
	catch (e)
	{
		v=new Array(a+b+'.6.0',a+b+'.5.0',a+b+'.4.0',a+b+'.3.0',a+b,'Microsoft.'+b); a=v.length;
		for (i=0; i<a && !x; i++) { try { x=new ActiveXObject(v[i]); } catch (e) {} }
	}
	return (!x)?false:x;
}
</script>
</head>
<body>
<input id="my_id_file" type="file" /><br>
<input id="my_send" type="button" value="upload file" onclick="if (my_reader==null && my_interval==null) f_upload()" />
</body>
</html>
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504283
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примечание: реальное имя php-файла подставлять сюда вместо 'test2':
my_HTTP.open('POST','test2.php',true);
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504297
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aswsВ IE9 не могу сейчас посмотреть, но вроде в нём НЕ будет работать.не будет - там нет FileReader.

А вообще - необходимость подобного кода нынче весьма узкая. Должен быть FileReader, но при этом отсутствовать FormData. Если верить MDN, то единственный случай на десктопе - FF 3.6. А в целом у FormData поддержка немного лучше
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504306
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
другой момент - если берем содержимое файла в base64, то нет смысла его отправлять именно как "multipart/form-data".
это строка, можно отправить как угодно.
к тому же серверный код теперь не может обрабатывать сабмит формы с файлом - там не будет никакого base64
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504316
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, это понятно, дело в том, что можно формировать из самого JS "файлы с данными", и это будет работать даже из IE8.
А формат base64 используется для одновременной передачи 100500 полей через один запрос, в том числе и файлов.
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504319
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формат base64 используется для кодирования непечатных символов печатными. Передавать одновременно любое количество полей и файлов можно и без таких заморочек.
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504320
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то-есть по сути отправляется через .send() строка, которую обрабатывает движок того или иного браузера,
и делать конкатенацию строки с бинарными данными - риск, как-бы глюков не было...
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504325
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asws,

я к тому, что те строковые данные, которые у тебя есть (файлы в base64, тексты) можно с тем же успехом отправить как "application/x-www-form-urlencoded" - всё равно файлы на сервере придется получать из base64

тогда в пхп вместо $_FILES использовать $_POST
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504333
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aswsи делать конкатенацию строки с бинарными данными - риск, как-бы глюков не было...тут ещё есть такой момент: "multipart/form-data" - это в любом случае отправка бинарных данных.
если в твоей строке все символы <128, то все норм., а если есть, например, русские буквы? что будет отправлено? FormData, к примеру, всегда преобразует в utf8
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504339
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

Несколько лет всё корректно в разных браузерах, работаю только с UTF-8

Реальных ситуаций много, поэтому приведённый мной способ может применяться в некоторых случаях.
Например, когда php-код не знает, что файлы - это не обязательно именно загруженные лично пользователем...

Я привёл это способ и обратил внимание на пользу знаний что такое POST изнутри,
потому что сколько видел тем, почему-то утверждается, что XMLHttpRequest этого не может,
но дело не в XMLHttpRequest, он-то как раз позволяет описать и передать что угодно,
дело на самом деле в FileAPI, поддерживаеется он браузером или нет.
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504354
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем? Ну зачем все эти все эти ректальные игры с xhr, если форма+ифрейм прекрасно работают, а на сервере даже не надо разгребать запрос, все уже разложено по полочкам?
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504368
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЗачем? Ну зачем все эти все эти ректальные игры с xhr, если форма+ифрейм прекрасно работают, а на сервере даже не надо разгребать запрос, все уже разложено по полочкам?зачем нужно знать javascript, если есть jQuery? ))
Если серьёзно, то задачи бывают настолько разные, что с наскока решать привычными способами - это плодить монстров...
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504381
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это называется плодить монстров: 15307445
...
Рейтинг: 0 / 0
Ajax загрузка файла на сервер
    #38504427
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну это с непривычки так кажется...
Дело не ограничивается одними сайтами и порталами, хотя и там это работает отлично.
Существуют довольно сложные системы, как по RIA-интерфейсу, так и по разнообразным данным массы форматов и протоколов.
Опасность! Вызов расовой ненависти
Там ваши "привычные" iframe, JSON, jquery + UI и другие Ext-JS-сы делают из таких систем монстров раньше, чем система будет сделана и заработает.
Многие не понимают, что при всём их умении юзать примеры, описанные в каждой 1 книге, и фреймворки,
они на самом деле являются дилетантами, мало понимающими современные технологии в необходимом объёме,
ибо читают одни и те-же книги одних авторов и адептов, вместо того, чтобы думать головой.

Это не следует принимать никому на свой счёт,
чисто логическое размышление, если человек не понимает, значит у него недостаточно опыта,
значит он является дилетантом в некоторых вопросах.
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Ajax загрузка файла на сервер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]