0

我正在尝试制作一个独立的 Flash/AIR 上传器。但我遇到了一些问题。我收到无法上传文件的错误消息。该脚本在上传图像时可以正常工作,但在上传 ZIP/RAR/Tar 时会出现错误

这是 Uploader.as

package {

    import flash.display.*;
    import flash.events.*;
    import flash.text.*;

    import flash.net.FileReference;
    import flash.net.FileReferenceList;
    import flash.net.FileFilter;
    import flash.net.URLRequest;
    import flash.utils.Timer;
    import flash.events.TimerEvent;


    public class Uploader extends MovieClip {

        var file:FileReference;
        var filefilters:Array;
        var req:URLRequest;
        var tm:Timer;
        var speed:Number = 0;
        var currbytes:Number = 0;
        var lastbytes:Number = 0;

        public function Uploader(){
            req = new URLRequest();
            req.url = ( stage.loaderInfo.parameters.f )? stage.loaderInfo.parameters.f : 'http://bios.website.ltd/client-000000000/upload.php';
            file = new FileReference();
            setup( file );
            select_btn.addEventListener( MouseEvent.CLICK, browse );
            progress_mc.bar.scaleX = 0;
            tm = new Timer( 1000 );
            tm.addEventListener( TimerEvent.TIMER, updateSpeed );
            cancel_btn.addEventListener( MouseEvent.CLICK, cancelUpload );
            cancel_btn.visible = false;
        }

        public function browse( e:MouseEvent ){
            filefilters = [ new FileFilter('Archives', '*.rar;*.zip;*.tar') ]; // add other file filters
            file.browse( filefilters );
        }

        private function setup( file:FileReference ){
            file.addEventListener( Event.CANCEL, cancel_func );
            file.addEventListener( Event.COMPLETE, complete_func );
            file.addEventListener( IOErrorEvent.IO_ERROR, io_error );
            file.addEventListener( Event.OPEN, open_func );
            file.addEventListener( ProgressEvent.PROGRESS, progress_func );
            file.addEventListener( Event.SELECT, selectHandler );
            file.addEventListener( DataEvent.UPLOAD_COMPLETE_DATA, show_message );      
        }

        private function cancel_func( e:Event ){
            trace( 'canceled !' );
        }

        private function complete_func( e:Event ){
            trace( 'complete !' );
        }

        private function io_error( e:IOErrorEvent ){
            var tf = new TextFormat();
            tf.color = 0xff0000;
            label_txt.defaultTextFormat = tf;
            label_txt.text = 'The file could not be uploaded.';
            tm.stop();
            cancel_btn.visible = false;
            select_btn.visible = true;
        }

        private function open_func( e:Event ){
            //trace( 'opened !' );
            tm.start();
            cancel_btn.visible = true;
            select_btn.visible = false;
        }

        private function progress_func( e:ProgressEvent ){
            progress_mc.bar.scaleX = e.bytesLoaded / e.bytesTotal;
            var tf = new TextFormat();
            tf.color = 0x000000;
            label_txt.defaultTextFormat = tf;
            label_txt.text = Math.round( (e.bytesLoaded/e.bytesTotal)*100)+'% uploaded '+speed+' kb/s';
            currbytes = e.bytesLoaded;
        }

        private function selectHandler( e:Event ){
            file.upload( req );

        }

        private function show_message( e:DataEvent ){
            tm.stop();
            var tf = new TextFormat();
            if( e.data == 'ok' ){
                tf.color = 0x009900;
                label_txt.defaultTextFormat = tf;
                label_txt.text = 'The file has been uploaded.';
            } else if( e.data == 'error'){
                tf.color = 0xff0000;
                label_txt.defaultTextFormat = tf;
                label_txt.text = 'The file could not be uploaded.';
            }
        }

        private function updateSpeed( e:TimerEvent ){
            speed = Math.round( (currbytes - lastbytes)/1024 );
            lastbytes = currbytes;
        }

        private function cancelUpload( e:MouseEvent ){
            file.cancel();
            reset();
        }

        private function reset(){
            cancel_btn.visible = false;
            select_btn.visible = true;
            label_txt.text = '';
            progress_mc.bar.scaleX = 0;
        }

    }   
} 

这是 Upload.php

<?php
$uploads_dir = './data/';

if( $_FILES['Filedata']['error'] == 0 ){
    if( move_uploaded_file( $_FILES['Filedata']['tmp_name'], $uploads_dir.$_FILES['Filedata']['name'] ) ){
        echo 'ok';
        exit();
    }
}
echo 'error';
exit();
?>

关于为什么我不能上传 ZIP/RAR/Tar 文件的任何线索或建议?

4

0 回答 0