2012-04-02 7 views
4

Ich habe meinen Code vereinfacht eine Datei ohne iFrame oder Flash-Engine für das Hochladen, und ich kam zu dieser Ajax-Funktion auf:ajax php-Datei-Upload ohne iFrame oder Flash-Motor

<input type="file" name="uploadfile" id="myfile" /><label for="file" id="progress"></label> 

    <script src="js/jquery-1.7.1.min.js"></script> 
    <script> 

    function uploadFile(files) { 

     var xmlhttp; 
     if(window.XMLHttpRequest) 
      xmlhttp = new XMLHttpRequest(); 
     else 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 

     xmlhttp.upload.onprogress = function(e) { 
      $("#progress").empty().append(e.loaded + " - " + e.total); 
     } 

     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       alert(xmlhttp.responseText + "DONE!"); 
      } 
     } 

     xmlhttp.open("post", "post.php", true); 
     xmlhttp.setRequestHeader("If-Modified-Since", "Mon, 26 Jul 1997 05:00:00 GMT"); 
     xmlhttp.setRequestHeader("Cache-Control", "no-cache"); 
     xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
     xmlhttp.setRequestHeader("X-File-Name", files[0].fileName); 
     xmlhttp.setRequestHeader("Content-Type", "multipart/form-data"); 
     xmlhttp.send(files[0]); 
    } 



    $(document).ready(function() { 

     $("#myfile").change(function() { 
      uploadFile(this.files); 
     }); 

    }); 

    </script> 

Dies ist der PHP-Code die Erwiderung auf die ajax-Funktion:

<?php 
if(isset(
     $_SERVER['CONTENT_TYPE'], 
     $_SERVER['CONTENT_LENGTH'], 
     $_SERVER['HTTP_X_FILE_NAME'] 
    ) && 
    $_SERVER['CONTENT_TYPE'] == 'multipart/form-data'){ 

     $file->name = basename($_SERVER['HTTP_X_FILE_NAME']); 
     $input = fopen('php://input', 'rb'); 
    $file = fopen('files/'.$file->name, 'wb'); 
    stream_copy_to_stream($input, $file); 
    fclose($input); 
    fclose($file); 
    } else { 

    echo "Error"; 
    } 
?> 

Das Problem ist, manchmal funktioniert es manchmal Fehler, während versuchen, die gleiche Datei zu. Ich hoffe, es gibt eine Lösung, um dieses Problem zu beheben. Der Code ist einfach, wenn ich eine Datei mit Eingabedateityp auswähle, wird die uploadFile-Funktion ausgeführt. Wenn es kaputt geht, kann ich sehen, dass die Datei hochgeladen wird, aber es hat nicht die Originalgröße, also könnte es irgendwo Fehler machen und den Upload stoppen.

Vielen Dank im Voraus, Daniel!

+0

Es ist nur, dass es in den meisten Browsern in dem Sinne gebrochen ist, dass es nicht wirklich solide funktioniert. Sie sollten sich an Ihren Browser-Anbieter wenden und besprechen, wie Sie Ihr Problem beheben können. – hakre

+0

gut das Problem ist, dass es funktioniert aber nur manchmal, auf kleinen Dateien funktioniert es immer .. aber auf Dateien mehr als 500 kb ~ es funktioniert nur manchmal, manchmal stoppt es aus irgendeinem Grund und laden Sie nur ein Stück der Datei –

+0

Sind Sie einen Fehler bekommen, wenn es nicht funktioniert? – jreed121

Antwort

1

Ich bin mir nicht sicher, ob es Ihr Problem ist, aber Sie sollten trotzdem sicherstellen, dass Ihr Server das Hochladen von genügend großen Dateien ermöglicht und ohne Zeitüberschreitung umgehen kann.

Sie können dies in Code oder php.ini (zB im Code festgelegt :)

ini_set('memory_limit', '96M'); 
ini_set('post_max_size', '64M'); 
ini_set('upload_max_filesize', '64M'); 

Dann stellen Sie sicher, dass Ihr Server eine Zeitüberschreitung nicht:

$seconds=120; 
set_time_limit ($seconds); 

diesen Code Alle Coes auf der Anfang Ihrer PHP-Datei.

+0

hochgeladen sehen ja, ich denke, die Auszeit ist das Problem, sonst sehe ich keine andere Erklärung warum für die gleiche Datei manchmal es lädt hoch, manchmal nicht. sehr viel für die Antwort, Daniel. –