Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Форма загрузки файлов и данных POST. Flex 3 + PHP (http://www.flasher.ru/forum/showthread.php?t=114823)

CblP 11.08.2008 02:38

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

Задача: Написать на 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

Цитата:

Сообщение от sarjick (Сообщение 891701)
Может уже не актуально, но все равно спасибо.

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

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

подробнее можно прочитать здесь: http://help.adobe.com/ru_RU/FlashPla...filter_air=2.6

Apikaster 10.08.2011 15:55

Отличная тема ...
Заинтересовало ...


Часовой пояс GMT +4, время: 17:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.