Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.02.2014, 22:53
Интересующийся
Отправить личное сообщение для vasya37 Посмотреть профиль Найти все сообщения от vasya37
 
Регистрация: 29.09.2010
Сообщений: 20

Передача картинки javascript
Передача картинки javascriptЗадача из html страницы необходимо передать картинку в php файл и обратно получить текстовые данные. У меня есть форма, в которой присутствует тег <input type="file">, в который я вставляю картинку. Необходимо без перезагрузки страницы, передать картинку в php файл и получить в виде глобальной переменной $_FILE. Далее обработать и передать обратно имя картинки и т.д. Вся проблема, что у меня не получается передать сам файл в php. Пробую путём создания XMLHttpRequest и отсылаю методом POST. Если кто сталкивался помогите примером.
Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 01.02.2014, 23:51
Новичок на форуме
Отправить личное сообщение для user457 Посмотреть профиль Найти все сообщения от user457
 
Регистрация: 01.02.2014
Сообщений: 5

https://developer.tizen.org/dev-guid...pload_ajax.htm
Ответить с цитированием
  #3 (permalink)  
Старый 02.02.2014, 01:38
Интересующийся
Отправить личное сообщение для vasya37 Посмотреть профиль Найти все сообщения от vasya37
 
Регистрация: 29.09.2010
Сообщений: 20

Данным способом уже пробовал.
форма
<input type="file" id="uploadfile" name="uploadfile" onchange="insertim_img();" />

скрипт
<script>  
   var client = new XMLHttpRequest();
  
   function insertim_img()
   {
      var file = document.getElementById("uploadfile");
     
      /* Create a FormData instance */
      var formData = new FormData();
      /* Add the file */ 
      formData.append("upload", file.files[0]);

      client.open("post", "/adds/insert_img.php", true);
      client.setRequestHeader("Content-Type", "multipart/form-data");
      client.send(formData);  /* Send to server */ 
   }
     
   /* Check the response status */  
   client.onreadystatechange = function() 
   {
      if (client.readyState == 4 && client.status == 200) 
      {
         alert(client.statusText);
      }
   }
</script>

php файл
<?php
$image=$_FILES['upload']['name']; 	
	if ($image) 
 	{
 		$filename = stripslashes($_FILES['upload']['name']);
  		$extension = pathinfo($filename, PATHINFO_EXTENSION);
 		$extension = strtolower($extension);
 if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) 
 		{
 			echo 'Неверный формат файла...';
 		}
 		else
 		{
 $size=filesize($_FILES['upload']['tmp_name']);

if ($size > 3145728)
{
	echo 'Размер файла больше <b>3</b>Mb <br/>';
}

$image_name=trans($title).'.'.$extension;

$newname=$_SERVER['DOCUMENT_ROOT']."/img/".$image_name;
$copied = copy($_FILES['upload']['tmp_name'], $newname);
}}
?>

Не работает, в хроме можно ошибки посмотреть. Вот скриншот
Ответить с цитированием
  #4 (permalink)  
Старый 02.02.2014, 12:36
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Попробуйте в другом браузере. И первым делом следует проверить канал как таковой, прежде чем файло закачивать. Что приходит на сервер, что получает браузер и все такое.

Кстати, не замечено в вашем процессинге сообщений об успехе мероприятия. Только насчет обломов есть эхо.
Ответить с цитированием
  #5 (permalink)  
Старый 02.02.2014, 15:29
Интересующийся
Отправить личное сообщение для vasya37 Посмотреть профиль Найти все сообщения от vasya37
 
Регистрация: 29.09.2010
Сообщений: 20

Код должен быть универсальным, то есть работать в любом браузере, потому что смысла в нем не будет. Может есть возможность по другому решить данную задачу? Это банальная функция отправки картинки без перезагрузки браузера. Как на авито - добавляешь объявление, выбираешь картинку, она загружается на сервер и выводится миниатюра! У меня проблема в передаче на пхп файл.
Ответить с цитированием
  #6 (permalink)  
Старый 03.02.2014, 00:21
Интересующийся
Отправить личное сообщение для vasya37 Посмотреть профиль Найти все сообщения от vasya37
 
Регистрация: 29.09.2010
Сообщений: 20

Кое как смог передать через данную функцию файл на пхп обработку. Только теперь не могу принять в пхп. Запускаю функцию print_r($GLOBALS); и выводит что то подобное
[SERVER_SOFTWARE] => Apache/2.2.25-3-beget (Unix) [SERVER_NAME] => ***.com [SERVER_ADDR] => *** [SERVER_PORT] => 80 [REMOTE_ADDR] => *** [DOCUMENT_ROOT] => ***/public_html [SERVER_ADMIN] => webmaster@***.com [SCRIPT_FILENAME] => ***/public_html/insert_img.php [REMOTE_PORT] => 54693 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.0 [REQUEST_METHOD] => POST [QUERY_STRING] => [REQUEST_URI] => /insert_img.php [SCRIPT_NAME] => /insert_img.php [PHP_SELF] => /insert_img.php [REQUEST_TIME] => 1391371961 [argv] => Array ( ) [argc] => 0 ) [_FILES] => Array ( ) [HTTP_POST_FILES] => Array ( ) [_REQUEST] => Array ( [PHPSESSID] => 415f92b9d70fa1e213f9114df8133203 ) )
Получается передаю методом пост, а это переменная пуста. $_FILES тоже пуста. Смог кое как посмотреть что файл передается функцией
$data=file_get_contents('php://input');
//  print_r($data);
там выводится имя файла, метод передачи формы multipart/form-data; и огромное количество иероглифов(я предполагаю сама картинка), что мне дальше делать?
Ответить с цитированием
  #7 (permalink)  
Старый 03.02.2014, 05:54
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Делайте вот что: читайте что вам пишут веря в то, что пишут не от балды как вы привыкли не читать что пишут.

Я вам предложил проверить канал, это значит в файле /adds/insert_img.php надо сделать вот что

<?php
die("I have heard");
// тут остальная тряхомудия файла

Это значит что скрипт мгновенно сдохнет как только запустится, но выдаст в буфер фразу I have heard (Я услышал) которую вам надо вывести в консоль через ту самую функцию которая висит на событии ответа сервера

client.onreadystatechange = function() {
console.log(client.responseText)
}

Кнопки-файлы - все остается, и файлы могут на сервер уходить, но вы их не трогаете и не ищите не обрабатываете (они сами удалятся после die() из темпа), а просто смотрите в браузере, в консоли что ответил сервер.

Таким образом после нажатия Отправить или что у вас там, в консоли должен появиться текст: I have heard.
Ответить с цитированием
  #8 (permalink)  
Старый 03.02.2014, 06:04
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Появился? Теперь проверяете отправку файлов. Которая делается вот так

<?php
print_r($_FILES);
die(); // "I have heard" - удалите

В консоли браузера должен появится текст показывающий значение переменной $_FILES, а оно - если переменная не пустая - массив, который print_r() покажет красиво, с переносами (поэтому в браузер особого смысла выводить нет - красиво не будет).

Увидев что в $_FILES вы поймете что делать дальше. Структра $_FILES - табличная. То есть на каждый файл несколько полей. Начинают как правило с поля error, по значению которого можно судить об успешности загрузки файла. Если там 0 - загрузился и значит можно обрабатывать. Значения кодов ошибок

Код:
$err_msg = array(
	1=>'Размер закачанного файла превышает upload_max_filesize как определено в php.ini',
	2=>'Размер закачанного файла превышает значение MAX_FILE_SIZE как определено в HTML форме',
	3=>'Файл закачался не полностью',
	4=>'Не был выбран файл для закачки',
	6=>'Не найдена папка временного хранения файлов на сервере',
	8=>'Недопустимые символы в имени файла. Допускаются "-", цифры: 0-9, буквы: A-Z и "_"',
	9=>'Недопустимая длина имени файла (макcимум 225 символов)'
);
8 и 9 - это мои собственные коды.
Ответить с цитированием
  #9 (permalink)  
Старый 03.02.2014, 07:36
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Кстати вот страница с тем самым примером откуда вы сырец сперли: http://download.tizen.org/misc/examp...el_2/xhr1.html

Процессинга там нет, выдает 404, но отправка работает, можете сравнить заголовки с тем что выдает ваш скрипт и оригинальный.

И насчет других браузеров. Чтобы во всех браузерах поведение вашей апликухи было одинаковым придется изучать поведение всех браузеров и внедрять в апликуху таблетки от девиаций.

Например ФФ выдает значение кнопки файл как файл, а Хром выдает с какой-то байдой, которую еще отрезать надо.
Ответить с цитированием
  #10 (permalink)  
Старый 03.02.2014, 12:33
Интересующийся
Отправить личное сообщение для vasya37 Посмотреть профиль Найти все сообщения от vasya37
 
Регистрация: 29.09.2010
Сообщений: 20

Я написал что $_FILES пуст. я пробовал print_r($_FILES); и print_r($_POST); тут тоже пусто. Выводит Array(а тут ничего, пустота).
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров javascript между iframe и документом. freedon Events/DOM/Window 8 05.05.2011 16:29
Как убрать рамку - обводку вокруг картинки вставленной с помощью javascript shaman888 Элементы интерфейса 1 16.04.2011 18:50
JavaScript - передача ссылки по средсвам JavaScript и перезагрузка плеера Программер Flash 1 26.02.2011 22:11
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34