2016-04-14 3 views
0

Ich versuche, eine Datei auf einen Server mit AS3 und PHP hochzuladen. Hier ist mein AS3-Code und dann der PHP-Code. Der Ordner, in den ich hochladen möchte, ist beschreibbar. und die Dateigröße beträgt etwa 20 KB. Das PHP-Skript befindet sich auf meinem Server und die Flash-Datei ruft es auf.Hochladen von Dateien auf den Server mit AS3 und PHP Fehler

var UPLOAD_URL: String ="linktophpscriptonMysite" 
var fr: FileReference; 
var request: URLRequest = new URLRequest(); 
request.url = UPLOAD_URL; 

function startThis(): void { 

    fr = new FileReference(); 
    fr.addEventListener(Event.SELECT, selectHandler); 
    fr.addEventListener(Event.OPEN, openHandler); 
    fr.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
    fr.addEventListener(Event.COMPLETE, completeHandler); 
    fr.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
    startUpload() 
} 

function startUpload(): void { 
    try { 
     var success: Boolean = fr.browse(); 
     trace("success") 
    } catch (error: Error) { 
     trace("Unable to browse for files.", Error); 
    } 
} 

function progressHandler(event: ProgressEvent): void { 
    trace(event.bytesLoaded, event.bytesTotal); 

} 
function ioErrorHandler(event: IOErrorEvent): void { 
    //trace("Some error ", event.target.data.systemResult); 
    //systemResult is echoed by PHP 

} 
function openHandler(event: Event): void { 
    try { 
     //var success: Boolean = fr.browse(); 
    } catch (error: Error) { 
     trace("Unable to browse for files.", Error); 
    } 

} 
function completeHandler(event: Event): void { 
    trace(event.target.data.systemResult); 
//this reads the result, again, from PHP echo "systemResult=all is good"; 


} 

function selectHandler(event: Event): void { 

    fr.upload(request); 
} 

Und dann, hier ist der PHP-Code: Dieser Code ein genereller Upload-Skript, das ich auf der PHP-Handbuch Seite gefunden

<?php 

header('Content-Type: text/plain; charset=utf-8'); 

try { 


    // Undefined | Multiple Files | $_FILES Corruption Attack 
    // If this request falls under any of them, treat it invalid. 
    if (
     !isset($_FILES['upfile']['error']) || 
     is_array($_FILES['upfile']['error']) 
    ) { 
     echo "systemResult=Error"; 
     throw new RuntimeException('Invalid parameters.'); 

    } 

    // Check $_FILES['upfile']['error'] value. 
    switch ($_FILES['upfile']['error']) { 
     case UPLOAD_ERR_OK: 
      break; 
     case UPLOAD_ERR_NO_FILE: 
      throw new RuntimeException('No file sent.'); 

     case UPLOAD_ERR_INI_SIZE: 
     case UPLOAD_ERR_FORM_SIZE: 
      throw new RuntimeException('Exceeded filesize limit.'); 
     default: 
      throw new RuntimeException('Unknown errors.'); 
    } 

    // You should also check filesize here. max is 100 mb 
    if ($_FILES['upfile']['size'] > 10000000) { 
     throw new RuntimeException('Exceeded filesize limit.'); 
    } 

    // DO NOT TRUST $_FILES['upfile']['mime'] VALUE !! 
    // Check MIME Type by yourself. 
    $finfo = new finfo(FILEINFO_MIME_TYPE); 
    if (false === $ext = array_search(
     $finfo->file($_FILES['upfile']['tmp_name']), 
     array(
      'jpg' => 'image/jpeg', 
      'png' => 'image/png', 
      'gif' => 'image/gif', 
     ), 
     true 
    )) { 
     throw new RuntimeException('Invalid file format.'); 
    } 

    // You should name it uniquely. 
    // DO NOT USE $_FILES['upfile']['name'] WITHOUT ANY VALIDATION !! 
    // On this example, obtain safe unique name from its binary data. 
    if (!move_uploaded_file(
     $_FILES['upfile']['tmp_name'], 
     sprintf('./uploads/%s.%s', 
      sha1_file($_FILES['upfile']['tmp_name']), 
      $ext 
     ) 
    )) { 
     throw new RuntimeException('Failed to move uploaded file.'); 
    } 

    echo 'File is uploaded successfully.'; 

} catch (RuntimeException $e) { 

    echo $e->getMessage(); 

} 

?> 

Das Problem, das ich habe, ist, dass die Datei nicht hochgeladen Bekommt und ich bekomme kein Feedback von PHP, warum.

Vielen Dank für jede Hilfe

UPDATE: Vielen Dank für die Antwort und Antwort @akmozo. Wie ich in meinem Kommentar gesagt, das Skript

arbeitete
<?php 

$uploads_dir = './uploads/'; 

    if($_FILES['Filedata']['error'] == 0){ 

    if(move_uploaded_file($_FILES['Filedata']['tmp_name'],  $uploads_dir.$_FILES['Filedata']['name'])){ 

    echo 'ok'; 
    echo 'systemResult=Awesome'; 

    exit(); 

    } 

    } 

    echo 'error'; 
    echo 'systemResult=did not work'; 

    exit(); 

    ?> 

Antwort

1

Standardmäßig ist der Upload-Datenfeldnamen eines FileReference Objekt ist "Filedata" und das ist, was Sie in Ihrem PHP-Code verwenden sollten ($_FILES['Filedata'] ...).

Sie können natürlich diesen Namen in der FileReference.upload() Funktion ändern:

fr.upload(request, 'upfile'); 

Hoffnung, die

+0

vielen Dank für Ihren schnellen Kommentar helfen kann und Antwort. Leider bekomme ich immer noch den gleichen Fehler, und nichts wird hochgeladen. Ich habe versucht, beide Upfile auf Filedata zu ändern, ohne Glück. Allerdings funktioniert dieses grundlegende Skript PHP-Skript, das mir sagt, dass Flash tut, was soll, aber vielleicht hat das PHP-Skript Probleme in ihm – FlashV8

+0

@ FlashV8 Sorry, aber ich sehe nicht, was das Problem genau ist: Flash oder PHP ? – akmozo