Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Аплоадер фото, такой же как Вконтакте с ресайзом(не могу закончить) (http://www.flasher.ru/forum/showthread.php?t=139477)

wir_wolf 02.05.2010 15:50

Аплоадер фото, такой же как Вконтакте с ресайзом(не могу закончить)
 
Уважаемые форумчани, У меня недавно возникла проблема с загрузкой и ресайзом фото.
Сначала я сделал ресайз в пхп, но так как у меня на хостинге на 1 выполнение скрипта отведено 25 мб, мне пришлось отойти от этой идеи, так как после декомпрессии фото будет занимать длинна * ширина * 4 байта. Если фото размером 2100 на 3200 декомпрессить то получиться 26880000 байт, а это уже превышает допустимый размер, и это не придел.
Я решил делать аплоадер на сервер во флексе и чтобы там ресайз в клиенте.
Нашел хороший урок тут
взял декомпилил аплоадер который вконтакте, тем самым получив класс ресайза, но вот в чем вся проблема, я не могу из типа FileRefrens получить тип BitmapData. С кучей людей переговорил, и так и не смог сделать, вот мои исходники.
Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
        xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="absolute"
        width="540" height="465"
        initialize="init()" viewSourceURL="srcview/index.html">
       
       

<mx:Script>
        <![CDATA[
                import mx.events.CollectionEvent;
                import flash.net.FileReferenceList;
                import mx.collections.ArrayCollection;
                import imgEdit;
                [Bindable]
                public var imgClass:imgEdit = new imgEdit();
                public var _imgClass:imgEdit;               


                public var photos:ArrayCollection = new ArrayCollection;       
                public var Array_photo:ArrayCollection = new ArrayCollection;
                private var frList:FileReferenceList = new FileReferenceList;
               
                private var _loader:Loader;
                private var _bitmap:Bitmap;
                private var _browseTxt:*;



                private function init():void
                {
       
                        photos.addEventListener(CollectionEvent.COLLECTION_CHANGE,function():void
                        {
                                startUploadButton.enabled = (photos.length>0);
                                clearPhotosButton.enabled = (photos.length>0);
                        });
                        frList.addEventListener(Event.SELECT,addPhotos);
                }               

                private function selectPhotos():void
                {
                        var fileFilter:FileFilter = new FileFilter("Изображения jpeg","*.jpg;*.jpeg");
                        frList.browse([fileFilter]);
                }

                private function addPhotos(e:Event):void
                {
                        for (var i:uint = 0; i < frList.fileList.length; i++)
                        {
                                var elem:Object = new Object;
                                elem.fr = FileReference(frList.fileList[i]);
                                elem.fr.load();
                                elem.fr.addEventListener(Event.COMPLETE,refreshThumb);
                                photos.addItem(elem);

                        }
                }
               
                private function refreshThumb(e:Event):void
                {
                        photosList.invalidateList();
                }

                private function clearPhotos():void
                {
                        photos.removeAll();
                }
               
                public function clearPhoto(data:Object):void
                {
                        photos.removeItemAt(photos.getItemIndex(data));
                }




                private function startUpload():void
                {
                        for (var i:int = 0; i < photos.length; i++)
                        {
                                var file:FileReference = FileReference(photos.getItemAt(i).fr);
                                main(file);
                        }
                       
                        photosProgressContainer.visible = true;
                        var request:URLRequest = new URLRequest();
                        request.url = "upload.php";
                        var fr:FileReference = photos.getItemAt(0).fr;
                        fr.cancel();
                        fr.addEventListener(ProgressEvent.PROGRESS,uploadProgress);
                        fr.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadComplete);
                        fr.upload(request);
                }



 public function main(data:FileReference):void {
        var  file:FileReference;
  file = FileReference(data);
 // stage.addEventListener(MouseEvent.CLICK, init);
          file.addEventListener(Event.SELECT, frSelectHandler);
          file.addEventListener(Event.COMPLETE, frCompleteHandler);
            trace('----');
 }

 private function frSelectHandler(e:Event):void {
  e.target.load();
 }
 //
 private function frCompleteHandler(e:Event):void {
  var ldr:Loader=new Loader();
  ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, pictureComplete);
  ldr.loadBytes(e.target.data);
 }
 //
 private function pictureComplete(e:Event):void {
  var ldr:Loader = Loader(e.target.loader);
  trace(ldr.width, 'x', ldr.height);
  addChild(ldr);
 }

               
               
               
                private function uploadProgress(e:ProgressEvent):void
                {
                        photosProgress.setProgress(e.bytesLoaded,e.bytesTotal);
                }

                private function uploadComplete(e:DataEvent):void
                {
                        photos.removeItemAt(0);
                        if (photos.length > 0)
                                startUpload();
                        else
                                photosProgressContainer.visible = false;
                }
               
                private function cancelUpload():void
                {
                        photos.getItemAt(0).fr.cancel();
                        photosProgressContainer.visible = false;
                }
        ]]>
</mx:Script>

<mx:Panel
        title="Загрузка фотографий"
        paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10"
        width="100%" height="100%">

        <mx:TileList
                id="photosList"
                dataProvider="{photos}"
                itemRenderer="photoThumb"
                alternatingItemColors="[#FFFFFF]"
                verticalScrollPolicy="on"
                columnWidth="120" columnCount="4" rowHeight="110" rowCount="3"
                itemClick="{photosList.selectedIndex=-1}" />

        <mx:HBox id="photosProgressContainer" horizontalAlign="center" width="100%" visible="false">
                <mx:ProgressBar id="photosProgress" mode="manual" label="" />
                <mx:Button label="Отмена" click="cancelUpload()"  enabled="false"/>
        </mx:HBox>
               
        <mx:ControlBar horizontalAlign="center">
                <mx:Button id="selectPhotosButton" label="Выбрать фотографии" click="selectPhotos()" />
                <mx:Button id="startUploadButton" label="Начать загрузку" click="startUpload()"  enabled="false"/>
                <mx:Button id="clearPhotosButton" label="Очистить" click="clearPhotos()"  visible="true" enabled="false"/>
        </mx:ControlBar>
</mx:Panel>
</mx:Application>

В чем у меня проблема тнад этим кодом сижу уже примерно месяц, помогите пожалуйста.
PS.Надеюсь я ясно выразился, заранее большое спасибо за помощь!


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

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