2016-04-07 15 views
1

Ich habe versucht, eine Drag-and-Drop-Funktionalität auf meiner Site zu implementieren, um Dateien auf den Server hochzuladen. Aber es funktioniert nicht, das ist der Code, den ich verwendet:Datei-Upload (Drag and Drop) funktioniert nicht

main.php

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Drag and Drop Upload</title> 
     <script src="js/jquery-1.12.3.min.js"></script> 
    </head> 
    <body> 
     <div id="uploadzone" style="width: 100px; height: 100px; background-color: red"></div> 
     <span id="progress">Aktueller Fortschritt: 0%</span> 
     <script type="text/javascript" src="upload.js"></script> 
    </body> 
</html> 

upload.js

var filelist = []; // Ein Array, das alle hochzuladenden Files enthält 
var totalSize = 0; // Enthält die Gesamtgröße aller hochzuladenden Dateien 
var totalProgress = 0; // Enthält den aktuellen Gesamtfortschritt 
var currentUpload = null; // Enthält die Datei, die aktuell hochgeladen wird 

var uploadzone = document.getElementById('uploadzone'); 

if(uploadzone) { 

    uploadzone.addEventListener('dragover', function (e) { 
     e.stopPropagation(); 
     e.preventDefault(); 
     e.dataTransfer.dropEffect = 'copy'; 
    }); 

    uploadzone.addEventListener('drop', handleDropEvent, false); 
} 

function handleDropEvent(event) 
{ 
    event.stopPropagation(); 
    event.preventDefault(); 

    // event.dataTransfer.files enthält eine Liste aller gedroppten Dateien 
    for (var i = 0; i < event.dataTransfer.files.length; i++) 
    { 
     filelist.push(event.dataTransfer.files[i]); // Hinzufügen der Datei zur Uploadqueue 
     totalSize += event.dataTransfer.files[i].size; // Hinzufügen der Dateigröße zur Gesamtgröße 
    } 
} 

function startNextUpload() 
{ 
    if (filelist.length) // Überprüfen, ob noch eine Datei hochzuladen ist 
    { 
     currentUpload = filelist.shift(); // nächste Datei zwischenspeichern 
     uploadFile(currentUpload); // Upload starten 
    } 
} 

function uploadFile(file) 
{ 
    var xhr = new XMLHttpRequest(); // den AJAX Request anlegen 
    xhr.open('POST', 'upload.php'); // Angeben der URL und des Requesttyps 

    var formdata = new FormData(); // Anlegen eines FormData Objekts zum Versenden unserer Datei 
    formdata.append('uploadfile', file); // Anhängen der Datei an das Objekt 
    xhr.send(formdata); // Absenden des Requests 

    xhr.upload.addEventListener("progress", handleProgress); 
    xhr.addEventListener("load", handleComplete); 
    xhr.addEventListener("error", handleError); 
} 

function handleComplete(event) 
{ 
    totalProgress += currentUpload.size; // Füge die Größe dem Gesamtfortschritt hinzu 
    startNextUpload(); // Starte den Upload der nächsten Datei 
} 

function handleError(event) 
{ 
    alert("Upload failed"); // Die Fehlerbehandlung kann natürlich auch anders aussehen 
    totalProgress += currentUpload.size; // Die Datei wird dem Progress trotzdem hinzugefügt, damit die Prozentzahl stimmt 
    startNextUpload(); // Starte den Upload der nächsten Datei 
} 

function handleProgress(event) 
{ 
    var progress = totalProgress + event.loaded; // Füge den Fortschritt des aktuellen Uploads temporär dem gesamten hinzu 
    document.getElementById('progress').innerHTML = 'Aktueller Fortschritt: ' + (progress/totalSize) + '%'; 
} 

upload.php

<?php 
$file = $_FILES['uploadfile']; 

if (!empty($file['name'])) 
{ 
    move_uploaded_file($file['tmp_name'], "uploads/".$file['name']); 
} 

ich ein Tutorial gefolgt, dies zu tun, sondern als sagte, es funktioniert nicht. Hoffe du bist nicht zu verärgert über die deutschen Kommentare.

Ich habe keine Ahnung, warum es nicht funktioniert, bekomme ich überhaupt keine Fehler (weder "normalerweise sichtbar", noch in der Konsole) und die Netzwerkkarten zeigt mir, dass die Datei upload.php scheint geladen zu werden ... Hat jemand eine Idee, warum es nicht funktioniert?

Antwort

0

Okay, Problem gelöst ... Es war nicht über den Code, meine www-data Benutzer auf meinem Server nicht Eigentümer der „uploads“ -Ordner war, hatte also keine Erlaubnis zum Hochladen ..

Alle Tipps zur Verbesserung sind immer noch willkommen!