0

我在 flash as3 中有一个按钮,它使用一个类来上传图像,然后将其显示在主电影上。

我有一个层次结构:

  • www.MYSITE.com/test/
  • www.MYSITE.com/test/uploads/
  • www.MYSITE.com/test/uploads/images/

和 www.MYSITE.com/test/uploads/image.php 中名为 image.php 的文件

<?PHP
$target_path = $_REQUEST[ 'path' ];
$target_path = $target_path . basename( $_FILES[ 'Filedata' ][ 'name' ] ); 

if ( move_uploaded_file( $_FILES[ 'Filedata' ][ 'tmp_name' ], $target_path ) ) 
{
     echo "The file " . basename( $_FILES[ 'Filedata' ][ 'name' ] ) . " has been uploaded;";
} 
else
{
     echo "There was an error uploading the file, please try again!";
}
?>

原样:

package 
{
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import flash.geom.*;
    import flash.utils.*;
    import flash.net.*;
    import flash.system.*;

    import src.events.*;
    import src.image.*;
    import src.file.*;
    import src.load.*;
    import src.ui.*;
    import com.senocular.display.transform.*

    public class ImageUploader extends Sprite 
    {
        private var m_basePath  : String = 'http://www.MYSITE.com/test/';           // web server path
        private var m_uploadPath : String = 'uploads/';                                                 // folder on server where you will allow images to be uploaded it has folder permissions  set to 777 );
        private var m_outputPath : String = 'output/';                                                  // folder on server where images should be created; folder permissions are set to 777 );

        public function ImageUploader () 
        {
            // allow script access;
            Security.allowDomain( 'http://www.MYSITE.com/test' );           
            Security.allowInsecureDomain( 'http://www.MYSITE.com/test' );   

        // determine whether the swf is being accessed from the web orlocal hard drive;
            m_isLocal = false;

            init();
        }

        // display items;
        public var upload : UIButton;                       // upload button on .fla stage;

        // output container;
        private var m_output : Sprite = new Sprite();       // container for image;
        private var m_mask : Sprite = new Sprite();         // mask for image container;
        private var m_progress : Sprite = new Sprite();     // upload / download indicator;
        private var m_effect : Scribble;                    // covers image with random effect;

        // vars;
        private var m_isLocal : Boolean;                    // determines if swf is on web server or local drive;
        private var m_fileMgr : FileManager;                // manages the opening & upload of local files;
        private var m_imagePHP : String = 'image.php';      // file that will manage image upload on your server;
        private var m_finalImage : String;                  // final name of file on creation;
        private var m_imageQuality : Number = 90;           // jpeg or png export quality;
        private var m_capture : Sprite;                     // set this equal to the sprite or movie clip that you wish to capture ( set to stage for entire movie );
        private var m_downloader : GraphicLoader;           // handles image download ( after upload is complete );
        private var m_imageExtension : String = '.jpg';     // jpeg image extension;

//      returns upload php file path based on whether or not the swf is a local publish or hosted on a web server;  
        public function get uploadPath () : String
        {
            return m_basePath + m_imagePHP;
        }

//      returns image creation php file path based on whether or not the swf is a local publish or hosted on a web server;  
        public function get createPath () : String
        {
            return m_basePath + m_imagePHP;
        }

        //returns image creation php file path based on whether or not the swf is a local publish or hosted on a web server;    
        public function get downloadPath () : String
        {
            return m_basePath + m_uploadPath;
        }

        //returns image creation php file path based on whether or not the swf is a local publish or hosted on a web server;    
        public function get finalImagePath () : String
        {
            return m_basePath + m_outputPath + m_finalImage + m_imageExtension;
        }

        //returns container for image capture container;
        public function get captureContainer () : Sprite
        {
            return m_capture;
        }

        //sets container for image capture container;
        public function set captureContainer ( inContainer : Sprite ) : void
        {
            m_capture = inContainer;
        }

        //  browse for image files on click of upload button;   
        private function onBrowse ( e : MouseEvent ) : void
        {
            m_fileMgr.browse();
        }

        //track image upload progress;
        private function onUploadProgress ( e : CustomEvent ) : void
        {
            trace( 'image uploading : ' + e.params.percent );

            m_progress.scaleX = e.params.percent;
        }

        //fires when image upload is complete;      
        private function onImageUploaded ( e : CustomEvent ) : void
        {           
            var dPath : String = String( downloadPath + e.params.fileName );

            trace( 'image ready for download at : ' + dPath );

            m_downloader.loadURL( dPath );
        }

        //track image download progress;        
        private function onDownloadProgress ( e : CustomEvent ) : void
        {
            trace( 'image downloading : ' + e.params.percent );

            m_progress.scaleX = 1 - e.params.percent;
        }

        //fires on image download is complete;      
        private function onImageDownloaded ( e : CustomEvent ) : void
        {
            trace( 'image downloaded' );

            // get image from loader;
            var clip : * = new Bitmap( e.params.loaded.bitmapData.clone() ) ;

            // add the image to the stage;
            MovieClip(parent).textAssets.text_front.txtMc.holder_clipart.x = 215;
            MovieClip(parent).textAssets.text_front.txtMc.holder_clipart.clipart.clipart_inside.inside.addChild(clip);

            if (MovieClip(parent).textAssets.text_front.txtMc.holder_clipart.clipart.clipart_inside.inside.numChildren > 0)
            {
                MovieClip(parent).textAssets.text_front.txtMc.holder_clipart.clipart.clipart_inside.inside.removeChildAt(0);
            }           

            clip.smoothing = true;

        }

        //fires if there is an error during upload;     
        private function onUploadError ( e : CustomEvent ) : void
        {
            trace( 'upload error' );
        }

        //fires if there is an error during download;       
        private function onDownloadError ( e : ErrorEvent ) : void
        {
            trace( 'download error' );
        }

        //downloads image to swf;
        private function onGetCapturedImage ( e : MouseEvent ) : void
        {
            m_fileMgr.download( finalImagePath, m_finalImage + m_imageExtension );
        }

        //  set up file manager / button listeners; 
        private function init () : void
        {           
            // add output container to stage at 0,0;
            addChildAt( m_output, 0 );

            // check to make sure stage is available ( which it wouldn't be if this class were instantiated from another class );
            if ( stage != null ) 
            {
                // set up stage;
                stage.align = StageAlign.TOP_LEFT;
                stage.scaleMode = StageScaleMode.NO_SCALE;

                // create image mask that matches the stage height & width;
                with ( m_mask.graphics )
                {
                    beginFill( 0x000000 );
                    drawRect( 0, 0, stage.stageWidth, stage.stageHeight );
                }
            }

            // create progress indicator;
            with ( m_progress.graphics )
            {
                beginFill( 0x000000 );
                drawRect( 0, 0, upload.width, 1 );
            }

            addChild( m_progress );

            m_progress.x = upload.x;
            m_progress.y = upload.y + upload.height + 2;

            // set container to use as image capture area;
            captureContainer = m_output;

            // set capture container mask;
            captureContainer.mask = m_mask;

            // add effect to image;
            m_effect = new Scribble();

            captureContainer.addChild( m_effect );

            // show upload / scribble buttons;
            upload.show();

            // set progress bar to zero scale;
            m_progress.scaleX = 0;

            // set up file manager;
            m_fileMgr = new FileManager( uploadPath, m_uploadPath );
            m_fileMgr.addEventListener( FileManager.ON_PROGRESS, onUploadProgress );
            m_fileMgr.addEventListener( FileManager.ON_UPLOAD_ERROR, onUploadError );
            m_fileMgr.addEventListener( FileManager.ON_IMAGE_UPLOADED, onImageUploaded );

            // listen to buttons;
            upload.addEventListener( MouseEvent.CLICK, onBrowse );

        // set up loader;
            m_downloader = new GraphicLoader();
            m_downloader.addEventListener( GraphicLoader.ON_LOAD_PROGRESS, onDownloadProgress );
            m_downloader.addEventListener( GraphicLoader.ON_LOAD_COMPLETE, onImageDownloaded );
            m_downloader.addEventListener( ErrorEvent.ERROR, onDownloadError );
        }

        //returns new string representing the month, day, hour, minute and millisecond of creation for use as the image name;   
        private function getUniqueName () : String
        {
            var d : Date = new Date();

            return d.getMonth() + 1 + '' + d.getDate() + '' + d.getHours() + '' + d.getMinutes() + ''  + d.getMilliseconds();
        }
    }
}

所以每当我尝试上传任何电影时,我都会在 Flash 的输出中得到这个:

image uploading : 1
ERROR: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2038: I/O FILE ERROR. URL: http://www.MYSITE.com/test/image.php?path=uploads/"]

所以我不知道错误在哪里,我已将所有涉及的文件的权限设置为777...

4

2 回答 2

0

您只需授予访问权限,将FTP filezilla 中的所有内容上传到您要上传此文件的上传文件夹。我认为没有文件访问权限...

于 2012-11-02T09:59:04.100 回答
0

好吧,我发现了错误是什么,我调试了php文件,得到一个500内部错误服务器,所以检查原因我发现,权限是777,所以每个人都可以写,但我的服务器只允许自写,所以我将文件cdmod到747并修复了错误。另一方面,当内部服务器错误一起崩溃时,Flash。

于 2012-11-02T17:37:28.507 回答