PDA

Просмотр полной версии : Форма загрузки файлов и данных POST. Flex 3 + PHP


CblP
11.08.2008, 02:38
Загрузка Файла и других данных с формы на пхп скрипт.

Задача: Написать на Flex 3 (AS 3.0) форму с несколькими тектовыми полями и с кнопкой для выбора файла.

Проблема: нужно одновременно с файлом отправить еще и данные с формы (Имя фамилию).

Решение: В объекте класса URLRequest, который используется для отправки файла .upload() указать в его параметре .data данные которые нужно отправить вместе с файлом.

ЗЫ Как быть если у нас нужно отправить не один а несколько файлов???

Код:

sendform.as
// ActionScript file
import flash.events.Event;
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;

import mx.controls.Alert;

//
private var fileRef:FileReference = new FileReference();


private function init():void
{
// добавляем ивент на загрузку файла
fileRef.addEventListener(Event.COMPLETE, fileloaded);

// ивент на выбор файла
fileRef.addEventListener(Event.SELECT, fileSelected);
}

// кнопка Open file
private function openFile():void
{
// открытие диалогового окна для выбора файла
fileRef.browse();
}


private function fileSelected(event:Event):void
{
// пишем в поле имя файла
file_name.text = event.target.name.toString();
}

// отправка данных с формы
private function SendData():void
{

// объект класса с помощью которого мы пердадим файл и данные на пхп файл
var url_request:URLRequest = new URLRequest();

// указываем адресс куда будут передаватся данные
url_request.url = "http://[host]/php/test/resive_data.php";

// устанавливаем метод отправки POST
url_request.method = URLRequestMethod.POST; // "POST";

// задаем данные с формы в постовые переменные
// как вариант var variables:URLVariables = new URLVariables("name=Franklin");
url_request.data = new URLVariables();
url_request.data.first_name = first_name.text;// = variables; //= { id:"777"};
url_request.data.last_name = last_name.text;

// отправляем фай с помощью url_request в котором мы указали данные с формы, и по этому они все уходят вместе
// второй параметр "picture" - это название в ассоциативом массиве $_FILES (для php)
// елемента в котором будут находится даные файла - $_FILES ['picture'] - тут будет файл отправленный
fileRef.upload(url_request, "picture");
}


// выполняется при событии файл загрузился
private function fileloaded(event:Event):void
{
Alert.show("File and data loaded!!!");
}


sendfom.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();">

<mx:Label x="20" y="38" text="First Name"/>
<mx:TextInput x="92" y="36" id="first_name"/>
<mx:Button x="168" y="92" label="Select File" id="select_file" click="openFile();"/>
<mx:Button x="20" y="122" label="Send Data" id="send_data" click="SendData();"/>
<mx:Script source="sendform.as" />
<mx:TextInput x="92" y="66" id="last_name"/>
<mx:Label x="20" y="68" text="Last Name"/>
<mx:Label x="47" y="94" text="File"/>
<mx:TextInput x="92" y="92" width="68" enabled="false" id="file_name"/>
</mx:Application>


Получающий пхп файл. Они пишет ифо о полученных данных, хотя может перемещать файл в в какуюто директорию, и сохранять под именем id записи данных которые пришли вместе с файлом с формы и которые он же записал в БД.
resive_data.php

<?php

$fpp = fopen('code.txt', 'w');

fwrite($fpp, 'Resive data:
');

fwrite($fpp, "In _POST[] array:
");
fwrite($fpp, 'first_name: ' . $_POST['first_name'] . '
');
fwrite($fpp, 'last_name: ' . $_POST['last_name'] . '
');

fwrite($fpp, "In _FILES[] array:
");
fwrite($fpp, "File data is in key 'picture' " . $_POST['last_name'] . '
');
$csv = '_FILES[] array keys:
';
foreach(array_keys($_FILES) as $title)
{
// array_keys percurs the title of each vector
$csv .= $title . '
';
//$csv .= ' --- ';
}
fwrite($fpp, $csv);
fclose($fpp);

?>

В итоге пхп создает примерно такой файлик:
Resive data:
In _POST[] array:
first_name: Bob
last_name: Pitterson
In _FILES[] array:
File data is in key 'picture' dsfsdf
_FILES[] array keys:
picture

CblP
22.08.2008, 16:28
что. никому не интересно? Или все уже давно это шарят, а я кричу что открыл Америку!?

†‡Paladin‡†
22.08.2008, 16:55
Интересно. Спасибо.

AQUAFRESH
01.11.2009, 00:46
Опа то что нада )

даже ещё й работает )

CblP
02.11.2009, 12:40
рад, что пригодилось! =)

sarjick
08.03.2010, 15:11
Может уже не актуально, но все равно спасибо.

Не подскажите, если мне нужно загрузить несколько файлов, для каждого файла нужно отдельно вызывать fileRef.upload ?

RigiyTip
09.08.2011, 05:24
Может уже не актуально, но все равно спасибо.

Не подскажите, если мне нужно загрузить несколько файлов, для каждого файла нужно отдельно вызывать fileRef.upload ?

Для каждого файла нужен свой объект FileReference
Для того чтоб выбрать сразу несколько файлов можно воспользоватся классом FileReferenceList

подробнее можно прочитать здесь: http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html?filter_flex=4.1&filter_flashplayer=10.2&filter_air=2.6

Apikaster
10.08.2011, 15:55
Отличная тема ...
Заинтересовало ...