Передача картинки javascript
Передача картинки javascriptЗадача из html страницы необходимо передать картинку в php файл и обратно получить текстовые данные. У меня есть форма, в которой присутствует тег <input type="file">, в который я вставляю картинку. Необходимо без перезагрузки страницы, передать картинку в php файл и получить в виде глобальной переменной $_FILE. Далее обработать и передать обратно имя картинки и т.д. Вся проблема, что у меня не получается передать сам файл в php. Пробую путём создания XMLHttpRequest и отсылаю методом POST. Если кто сталкивался помогите примером.
Заранее спасибо. |
|
Данным способом уже пробовал.
форма <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); }} ?> Не работает, в хроме можно ошибки посмотреть. Вот скриншот ![]() |
Попробуйте в другом браузере. И первым делом следует проверить канал как таковой, прежде чем файло закачивать. Что приходит на сервер, что получает браузер и все такое.
Кстати, не замечено в вашем процессинге сообщений об успехе мероприятия. Только насчет обломов есть эхо. |
Код должен быть универсальным, то есть работать в любом браузере, потому что смысла в нем не будет. Может есть возможность по другому решить данную задачу? Это банальная функция отправки картинки без перезагрузки браузера. Как на авито - добавляешь объявление, выбираешь картинку, она загружается на сервер и выводится миниатюра! У меня проблема в передаче на пхп файл.
|
Кое как смог передать через данную функцию файл на пхп обработку. Только теперь не могу принять в пхп. Запускаю функцию 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; и огромное количество иероглифов(я предполагаю сама картинка), что мне дальше делать? |
Делайте вот что: читайте что вам пишут веря в то, что пишут не от балды как вы привыкли не читать что пишут.
Я вам предложил проверить канал, это значит в файле /adds/insert_img.php надо сделать вот что <?php die("I have heard"); // тут остальная тряхомудия файла Это значит что скрипт мгновенно сдохнет как только запустится, но выдаст в буфер фразу I have heard (Я услышал) которую вам надо вывести в консоль через ту самую функцию которая висит на событии ответа сервера client.onreadystatechange = function() { console.log(client.responseText) } Кнопки-файлы - все остается, и файлы могут на сервер уходить, но вы их не трогаете и не ищите не обрабатываете (они сами удалятся после die() из темпа), а просто смотрите в браузере, в консоли что ответил сервер. Таким образом после нажатия Отправить или что у вас там, в консоли должен появиться текст: I have heard. |
Появился? Теперь проверяете отправку файлов. Которая делается вот так
<?php print_r($_FILES); die(); // "I have heard" - удалите В консоли браузера должен появится текст показывающий значение переменной $_FILES, а оно - если переменная не пустая - массив, который print_r() покажет красиво, с переносами (поэтому в браузер особого смысла выводить нет - красиво не будет). Увидев что в $_FILES вы поймете что делать дальше. Структра $_FILES - табличная. То есть на каждый файл несколько полей. Начинают как правило с поля error, по значению которого можно судить об успешности загрузки файла. Если там 0 - загрузился и значит можно обрабатывать. Значения кодов ошибок Код:
$err_msg = array( |
Кстати вот страница с тем самым примером откуда вы сырец сперли: http://download.tizen.org/misc/examp...el_2/xhr1.html
Процессинга там нет, выдает 404, но отправка работает, можете сравнить заголовки с тем что выдает ваш скрипт и оригинальный. И насчет других браузеров. Чтобы во всех браузерах поведение вашей апликухи было одинаковым придется изучать поведение всех браузеров и внедрять в апликуху таблетки от девиаций. Например ФФ выдает значение кнопки файл как файл, а Хром выдает с какой-то байдой, которую еще отрезать надо. |
Я написал что $_FILES пуст. я пробовал print_r($_FILES); и print_r($_POST); тут тоже пусто. Выводит Array(а тут ничего, пустота).
|
Часовой пояс GMT +3, время: 18:25. |