Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   загрузка файлов через флэш на сервер (http://www.flasher.ru/forum/showthread.php?t=121340)

droch_fhoula 13.02.2009 15:48

загрузка файлов через флэш на сервер
 
как загружать файлы на сервер?
у меня есть пример на as2 а как на as3 я и понтия не имею.
пыталась переделать, но не получается.
может кто ссылку даст или подскажет как нибуть:rolleyes:

silin 13.02.2009 16:36

ниже 10й версии флеш не может сам что-то загрузить с компа юзера, может только попросить сделать это браузер, см. FileReference.upload (AS3 вариант ничем принципиально не отличается от AS2-версии)
в 10й версии может и сам загрузить (см. FileReference.load), дальше дело хозяйское - можно и серверу полученные данные оправить (см. URLLoader)

примеры в доках имеются, а в сети и подавно..

droch_fhoula 13.02.2009 17:56

Вложений: 1
я все равно е понимаю как это делается.
когда исправляю то все время разные ошибки выдаются.
посмотрите исходник плиз, как это можно переделать на as3.

Alex Lexcuk 14.02.2009 09:23

>>посмотрите исходник плиз, как это можно переделать на as3.
Не смотрел, тк. имею уже рабочую на AS3

Для тестов нужна программка Apache
Пишем для Flex или для Adobe Flash CS4 (версия плеера 10) такой документ класс
Код AS3:

//LoadCompFileDocAndSendToServer
package {
        import flash.display.*;
        import flash.text.*;
        import flash.net.*;
        import flash.events.*;
        import flash.utils.*;
 
        public class LoadCompFileDocAndSendToServer extends Sprite {
                private var loader:Loader,
                        file:FileReference,
                        txt:TextField,
                        sender:ByteArray,
                        i:int,
                        fileName:String,
                        request:URLRequest,
                        urlLoader: URLLoader,
                        strFileNoEx:String,
                        reg:RegExp;
 
 
                public function LoadCompFileDocAndSendToServer() {
                        txt=new TextField;
                        txt.autoSize=TextFieldAutoSize.LEFT;
                        file=new FileReference;
                        // file.browse(getTypes());
                        file.addEventListener(Event.COMPLETE,onComplete);
                        file.addEventListener(Event.SELECT,onSelectFile);
                        //onShowloadDialog();
                        txt.htmlText="<a href='event:load'><u>Загрузить файл c компьютера</a>;";
 
                        addChild(txt);//добавить на рабочее поле
                        txt.autoSize=TextFieldAutoSize.LEFT;
                        addChild(txt);
                        txt.addEventListener(TextEvent.LINK,txtLinkFunc);
                        urlLoader = new URLLoader();
                        urlLoader.addEventListener(Event.COMPLETE,completeHandlerUrlLoader);
                }
 
                private function txtLinkFunc(evt:TextEvent):void {
                        if (evt.text == 'load') {
                                onShowloadDialog();
                        }
                }
 
                //отображение диалога открытия файла
                private function onShowloadDialog(event:Event=null):void {
                        var fileFilter:FileFilter=new FileFilter("Images","*.jpg");
                        try {
                                file.browse([fileFilter]);
                        }
                        //catch(illegalOperation:IllegalOperationError){
                        catch (e:Error) {
                        }
                }
                //при выборе файла загружаем его
                private function onSelectFile(event:Event):void {
                        try {
                                file.load();
                        }
                        // catch(illegalOperation:IllegalOperationError)
                        catch (e:Error) {
                        }
                }
                private function onComplete(event:Event):void {
                        addChild(loader=new Loader  );
                        loader.loadBytes(file.data);
                        loader.y = 20;
 
                        //отправляем на сервер
                        reg = /\.\w+/;//регулярка вылавливающая расширение файла
                        strFileNoEx = file.name.replace(reg,'');
                        trace(strFileNoEx);//имя загруженного файла без расширения
 
                        request = new URLRequest(
                        "http://localhost/CONTENT_PATH/save-file.php?name="+strFileNoEx+"&d="+new Date().getTime());
                        request.data = file.data;
                        request.method = URLRequestMethod.POST;
                        request.contentType = 'application/octet-stream';
                        urlLoader.load(request);
 
                }
                private function completeHandlerUrlLoader(event:Event):void {
                        trace(urlLoader.data);
                        addChild(txt=new TextField);
                        txt.autoSize=TextFieldAutoSize.LEFT;
                        txt.y = 200;
                        txt.htmlText="<font color='#ff0000'  size='30'> Файл на сервере";
                }
        }
}

php скрипт принимает имя файла без расширения и добавляет расширения jpg
также понадобится php файл save-file.php

Код:

<?php
        //save-file.php
        $fileData = $GLOBALS[HTTP_RAW_POST_DATA];
        $fileName = ''.$_GET['name'].'.jpg';
        $fp = fopen($fileName, "w");
        fwrite($fp,$fileData);
        fclose($fp);
        echo "file write - OK ".$fileName;
?>


Пример как это работает (загрузите с компьютера jpg и он автоматом залетит мне на сайт)
После выбора файла пройдет некоторое время, должна появиться надпись файл на сервере.

http://www.murmadillo.tut.su/m/galle...ndToServer.swf

Посмотреть загрузился ли ваш jpg файл мне на сайт можно перейдя по ссылке

http://www.murmadillo.tut.su/m/gallery/

droch_fhoula 14.02.2009 16:06

спасибо!!! работает!!!
а как сделать так чтоб загруженные фото сразу в фото галерее отображались?

Alex Lexcuk 14.02.2009 17:40

>>а как сделать так чтоб загруженные фото сразу в фото галерее отображались?
В смысле галерейка с такими кнопочками:
[назад] [вперед] [стоп] [авто] [добавить рисунок]
А не боитесь???

droch_fhoula 14.02.2009 18:45

ну кикаких копок не нужно :)
мне нужно только чтоб это фото тут же появлялось в фотогалерее.
и его можно было бы посмотеть, и ничего больше.
нет не боюсь:) а чего боятся?

Alex Lexcuk 15.02.2009 01:08

ну так нужно галереи подсунуть php файл, который вернет jpg
типа такого
Код:

<?php
//return-picture.php
$dd=opendir(getcwd());
$my_string="";
while (true)
{
$cur=readdir($dd);
if ($cur=="") break;
if ( (strpos($cur,"jpg")==true) or (strpos($cur,"JPG")==true) )
$my_string=$my_string.$cur."|";
}
closedir($dd);
$my_string=$my_string;
echo $my_string;
?>

Загрузить его в галерею можно как-так (документ класс)
Код:

package {
        import flash.display.*; import flash.events.*; import flash.ui.*; import flash.text.*;
        import flash.net.*;import fl.transitions.*;import fl.transitions.easing.*;import flash.utils.*;

        public class DocGalery extends Sprite {
                private var loader:URLLoader,
                        pLoader:Loader,req:URLRequest,count:int,position:int,path:String,picArr:Array,
                        sp:Sprite,tween:Tween,tweenTimer:Tween,tr:Boolean,i:int,urlLoader:URLLoader,
                        prePathStr:String,allPicLoadingTr:Boolean,finalImag:int,
                        actTw:Boolean,nextPreCont:int,pattern:RegExp = /\w+\.\w+/,result:Object;

                public function DocGalery() {
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        stage.align = StageAlign.TOP_LEFT;

                        actTw = allPicLoadingTr = false;
                        nextPreCont = finalImag = 0;
                        //addChild(txt);
                        //загрузка имен файлов через php файл
                        prePathStr = "";// "http://localhost/CONTENT_PATH/gallery/";//;
                        var phpFileStr:String = "return-picture.php?"+new Date().getTime();
                        var pictURLReq:URLRequest = new URLRequest(prePathStr + phpFileStr);
                        urlLoader = new URLLoader();
                        urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
                        urlLoader.addEventListener(Event.COMPLETE, urlLoaderCompleteHandler);
                        urlLoader.addEventListener(ProgressEvent.PROGRESS,progressHandler);
                        urlLoader.load(pictURLReq);
                        //GoGalery();
                }
                private function progressHandler(event:ProgressEvent):void {
                        trace(" progressHandler loaded: " + event.bytesLoaded + " total: " + event.bytesTotal);
                }

                private function urlLoaderCompleteHandler(event:Event):void {
                        var strUnSort:String = new String(urlLoader.data);
                        var pictureArr:Array = strUnSort.split("|");
                        //var correctArr:Array = [];
                        picArr = [];
                        for (i = 0; i < pictureArr.length - 1; i++) {
                                result = pattern.exec(pictureArr[i]);
                                trace(result);
                                if (result!=null) if (result.toString() == pictureArr[i]) picArr.push(pictureArr[i]);
                        }
                        trace(picArr);
                        //имена файлов загружены - запускаем галерею
                        trace(strUnSort);
                        goGalery();
                }

                private function goGalery():void {
                        path = prePathStr;
                        req = new URLRequest();
                        count = 0;
                        position = 0;

                        onward();
                        tween = new Tween( { i:0 }, "i", Regular.easeOut, 0, 1, 5, true);
                        tweenTimer = new Tween( { i:0 }, "i", Regular.easeOut, 0, 1, 5, true);
                        tween.stop();
                        tweenTimer.stop();
                        tween.addEventListener(TweenEvent.MOTION_CHANGE, tweenChange);
                        tween.addEventListener(TweenEvent.MOTION_FINISH, finTweenFunc);
                        tweenTimer.addEventListener(TweenEvent.MOTION_FINISH, finTimerFunc);
                }
                private function loaderComplete(evt:Event):void {
                        trace(req.url);
                        if (loader.bytesTotal>3000){
                                sp = new Sprite();
                                sp.graphics.beginFill(0xffffff);
                                sp.graphics.drawRect(0, 0, 1500, 800);
                                pLoader = new Loader();
                                pLoader.loadBytes(loader.data as ByteArray);
                                sp.addChild(pLoader);
                                addChild(sp);
                                sp.alpha = 0;
                                finalImag++;
                                if (actTw == false) {
                                        nextPreCont++;
                                        tween.stop();
                                        tween.start();
                                }
                                count++;
                                onward();
                        }
                        else {
                                count++;
                                onward();
                        }
                }
                private function ioErrorHandler(event:IOErrorEvent):void {
                        count++;
                        onward();
                }

                private function onward():void {
                        if (count < picArr.length) {
                                trace('Гружу');
                                loader = new URLLoader();
                                loader.dataFormat= URLLoaderDataFormat.BINARY;
                                req.url = path + picArr[count];// +'?=' + new Date().getTime();
                                trace(req.url);
                                loader.load(req);
                                loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                                loader.addEventListener(ProgressEvent.PROGRESS,progressHandler);
                                loader.addEventListener(Event.COMPLETE,loaderComplete);
                        }
                        if (count == picArr.length) {
                                allPicLoadingTr = true;
                                tween.start();
                                position = nextPreCont;
                        }
                }
                private function tweenChange(evt:TweenEvent):void {
                        actTw = true;
                        if (allPicLoadingTr == true){
                                sp = this.getChildAt(position) as Sprite;
                                sp.alpha = tween.obj.i;
                        }
                        if (allPicLoadingTr == false){
                                try{sp = this.getChildAt(nextPreCont-1) as Sprite;
                                sp.alpha = tween.obj.i;}catch(e:Error){}
                        }
                }

                private function finTweenFunc(evt:TweenEvent):void {
                        tweenTimer.start();
                }

                private function finTimerFunc(event:TweenEvent):void {
                        actTw = false;
                        if (allPicLoadingTr == true){
                                position++;
                                trace("finalImag " + finalImag + " " + "position " + position);
                                if (position >= finalImag) {
                                        position = 0;
                                        for (i = 0; i < this.numChildren; i++) this.getChildAt(i).alpha = 0;
                                }
                                tween.start();
                        }
                }
        }
}

Будет работать так:
http://www.murmadillo.tut.su/m/gallery/DocGalery.swf

droch_fhoula 15.02.2009 12:19

а как сделать чтоб фото загружались каждая в отдельный контейнер и при этом выглядела как маленькая превьюшка, а именно меняла размер.
а то у меня чтото странно получается с scаleX и scaleY. фото становится громадным.
:(

loover 01.04.2009 22:46

а как правильно изменить размер в самом PHP? у меня есть код, но на выходе получается строка, а не jpeg. после добавления header("Content-type: image/jpeg"); php пишет, что заголовки уже добавлены и по-прежнему возвращает строку.


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

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