Информация

Обсуждало 2 человека

Опрос от автора

Чтобы принять участие в голосовании, зарегистрируйтесь, пожалуйста!

Загрузка файла вместе с переменными на сервер

Серверные технологии и Flash
18 ноября 2011 в 20:02:17

Доброго времени суток! Вот решил сделать свой первый видео-урок, тема которого загрузка на сервер файла вместе с переменными. Хотелось поблагодарить Dracyla за помощь в этом деле. Не смогу точно определить для какой аудитории будет этот урок, для начинающих или нет. Первые два посвящены регистрации на бесплатном хостинге, поддерживающим PHP. Затем идет обзор флэш-приложения, и файла php. Последний видео урок - тестирование проделанной работы.

Для тех у кого скорость интернета не позволяет смотреть видео, я написал небольшую статью, также приложу исходники.

Итак, первое видео, регистрация на бесплатном хостинге. Те, у кого уже есть хостинг, могут пропустить первые два урока.

OIG__lNaidk


Продолжаем регистрацию

sN41XZRKSAQ


Обзор флэш-приложения

gny-XCz56Rg


PHP-скрипт

N7dwzkxrb5c


Заключительное видео - тестирование

wx_SJ_3JhWA


Текстовый вариант!

Для работы понадобится класс MultipartURLLoader и PNGEncoder. Создадим файл .fla и назовем его Example.fla. Откроем его и в библиотеке поместим компонент Button, он понадобится для выполнения отправки рисунка. Также в поле Documents Class, которое находится во вкладке Properties, введем имя класса MainFrame. Теперь в папке с файлом создадим файл MainFrame.as, и напишем такой код:
package { import fl.controls.Button; import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.events.MouseEvent; import flash.events.Event; import flash.utils.ByteArray; import flash.net.URLLoader; import flash.net.URLVariables; import PNGEncoder; import MultipartURLLoader; import MultipartURLLoaderEvent; public class MainFrame extends Sprite { private var DrawSprite:Sprite; private var userName:String; private var url:String = 'http://youserverpath/picsaver.php'; private var myButton:Button; public function MainFrame():void { userName = "Georgi"; //Добавляем спрайт, в котором будем рисовать DrawSprite = new Sprite(); DrawSprite.graphics.clear(); DrawSprite.graphics.beginFill(0xffffff); DrawSprite.graphics.lineStyle(1, 0x000000); DrawSprite.graphics.drawRoundRect(0, 0, 200, 200, 2); DrawSprite.graphics.endFill(); DrawSprite.addEventListener(MouseEvent.CLICK, drawLine); addChild(DrawSprite); myButton = new Button();//Добавляем кнопку myButton.y = 250; myButton.label = "Отправить"; addChild(myButton); myButton.addEventListener(MouseEvent.CLICK, onButtonClick); } private function onButtonClick(e:MouseEvent):void { //Функция, которая будет отправлять данные на сервер e.target.enabled = false;//Отключаем кнопку var myBitmapData:BitmapData = new BitmapData(200, 200, false); myBitmapData.draw(DrawSprite);//Рисуем в BitmapData наш рисунок //Декодируем его в байт-код var imageByteArray:ByteArray = PNGEncoder.encode(myBitmapData); //Создали новый экземпляр класса MultipartURLLoader var loader:MultipartURLLoader = new MultipartURLLoader(); //Добавим переменную username и fileName loader.addVariable('username', userName); loader.addVariable('fileName', 'myPic.png'); //Добавляем обработчик событий loader.addEventListener(Event.COMPLETE, loadComplete); //добавляем сам файл, третье поле('MyPic') будет индексом, по которому мы сможем определить файл loader.addFile(imageByteArray, 'picture.png', 'MyPic'); //Отправляем данные loader.load(url); } private function loadComplete(e:Event):void { // по завершению отправки данных получаем информацию с сервера var loader:URLLoader = MultipartURLLoader(e.currentTarget).loader; trace(loader.data);//выводим ее в окошко Output myButton.enabled = true;//включаем кнопку, для последующей передачи данных } private function drawLine(e:MouseEvent):void { DrawSprite.graphics.beginFill(0xff00ff); DrawSprite.graphics.lineStyle(1, 0xff00ff); DrawSprite.graphics.drawRoundRect(mouseX - 5, mouseY - 5, 10, 10, 0); DrawSprite.graphics.endFill(); } } }

Необходимо поместить в папку с проектом файлы PNGEncoder.as, MultipartURLLoaderEvent.as, MultipartURLLoader.as для нормальной работы проекта. Механизм работы таков: мы с помощью мышки рисуем картинку, затем после нажатия на кнопку «Отправить», с помощью класса PNGEncoder преобразуем данные из BitmapData в массив. И с помощью метода addFile() класса MultipartURLLoader готовим файл к отправке. Также добавляем переменные с помощью метода addVariable(имя переменной, значение). И после команды load(адрес сервера) отправляем данные.

Далее создадим файл picsaver.php пишем скрипт php:
<? $host = 'Ваш хост'; $dbuser = 'Имя пользователя'; $dbpass = 'Пароль'; $dbname = 'Имя базы данных'; $table_user = 'Имя таблицы для сохранения данных'; //подключаемся к базе данных $db = mysql_pconnect($host,$dbuser,$dbpass) or die("output=false"); mysql_select_db($dbname) or die("output=false"); $PIC_FOLDER = 'pic/';// Папка, где будут храниться рисунки if(isset($_FILES['MyPic'])) {//Проверяем, если файл с параметром MyPic, который мы указали во flash-приложение, существует $username = $_POST['username'];//то запоминаем данные о пользователе $fileName = $_POST['fileName'];//запоминаем имя файла $filePath = $PIC_FOLDER.basename($fileName);// и путь к нему move_uploaded_file($_FILES['MyPic']['tmp_name'], $filePath);//загружаем файл на сервер //И записываем пользователю путь к картинке! $result = mysql_query("INSERT INTO $table_user (user_name, picture) VALUES ('$username', '$filePath')"); echo 'File transred!';//файл загружен! }else{//Если ошибка то echo 'Error';//Отвечаем сообщением об ошибке! } ?>


Загружаем на сервер файл, picsaver.php, в файле MainFrame прописываем адрес к нему. Вот и все.

Исходник - http://depositfiles.com/files/0tctxv0qa - 684 кб.

Обсуждение (вниз)

Не хватает только вашего мнения. Зарегистрируйтесь, чтобы написать!

18 ноября 2011 в 21:14:30

в будущем постараюсь делать))

18 ноября 2011 в 21:13:29

нет, об этом не позаботился.

18 ноября 2011 в 21:10:23

А работающая демка в сети есть?

18 ноября 2011 в 21:05:15

это для флеш сайта ?

18 ноября 2011 в 21:03:48

это я просто для примера сделал.

18 ноября 2011 в 20:49:41

Урок хороший. Видно, что человек много времени потратил для общей пользы.

А зачем хранить картинку в базе?
Fundux.ru v.3.0 © 2006-2014 AleXNoD
Портал русских флеш игр и flash мультов