Доброго времени суток! Вот решил сделать свой первый видео-урок, тема которого загрузка на сервер файла вместе с переменными. Хотелось поблагодарить
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 кб.