2013-02-12 18 views
13

Tak więc staram się znaleźć to, czego szukam i jak je wdrożyć.Przeciąganie i przesyłanie plików przeciągnij

Mam podstawowy program do przesyłania plików PHP, w którym użytkownik naciska przycisk niestandardowego przesyłania, wybiera plik, a następnie używa JS, sprawdza, czy nastąpiła zmiana (np. Użytkownik wybiera plik), a następnie przesyła formularz który ładuje obraz w porządku.

Co chcę teraz, to przeciągnij & upuść, aby przesłać obszar. Użytkownik może więc przeciągnąć obraz z eksploratora plików i upuścić go w wyznaczonym miejscu (a nie na całą stronę), a następnie po usunięciu tego obrazu, aby formularz automatycznie przesłał obraz i użył tego samego przetwarzania PHP.

Czy to możliwe i realistyczne?

Odpowiedz

28

Jest to absolutnie realistyczne i możliwe bez użycia wtyczki stron trzecich.

Poniższe fragmenty powinny dać wyobrażenie, jak to może działać:

Opadowej obszar

$(".drop-files-container").bind("drop", function(e) { 
    var files = e.originalEvent.dataTransfer.files; 
    processFileUpload(files); 
    // forward the file object to your ajax upload method 
    return false; 
}); 

processFileUpload() - metoda:

function processFileUpload(droppedFiles) { 
     // add your files to the regular upload form 
    var uploadFormData = new FormData($("#yourregularuploadformId")[0]); 
    if(droppedFiles.length > 0) { // checks if any files were dropped 
     for(var f = 0; f < droppedFiles.length; f++) { // for-loop for each file dropped 
      uploadFormData.append("files[]",droppedFiles[f]); // adding every file to the form so you could upload multiple files 
     } 
    } 

// the final ajax call 

     $.ajax({ 
     url : "upload.php", // use your target 
     type : "POST", 
     data : uploadFormData, 
     cache : false, 
     contentType : false, 
     processData : false, 
     success : function(ret) { 
       // callback function 
     } 
     }); 

} 

Przykładowy formularz:

<form enctype="multipart/form-data" id="yourregularuploadformId"> 
    <input type="file" name="files[]" multiple="multiple"> 
</form> 

Możesz użyć czegoś takiego jak punktu wyjścia. Wsparcie przeglądarka to można znaleźć tutaj http://caniuse.com/#feat=xhr2

Oczywiście można dodawać żadnych dodatków, które chcesz jak pasek postępu, podgląd, animacji ...

+0

Czy mógłbyś wyjaśnić sekcję 'if (droppedFiles.length> 0) { dla (f = 0; f Tenatious

+0

@Tenatious Dodałem tam kilka komentarzy. Ale jest to normalna pętla for, która dodaje upuszczone pliki do formularza. – wildhaber

+0

Ah Widzę. Udało mi się go załadować. Dzięki za pomoc!:) – Tenatious

2

Sprawdź tę wtyczkę jQuery! Z Ajax przesyłanie plików i więcej: Upload widget http://blueimp.github.com/jQuery-File-Upload/

pliku z wielokrotnego wyboru plików, przeciągnij & upuść, barów postępy i podgląd obrazów dla jQuery. Obsługuje między-domenowe, porcjowane i wznawiane ładowanie plików oraz zmianę rozmiaru obrazu po stronie klienta. Działa z każdą platformą po stronie serwera (PHP, Python, Ruby on Rails, Java, Node.js, Go itp.), Która obsługuje standardowe przesyłanie plików formularzy HTML.

+2

mam sen ten plugin ale to wydaje się skomplikowane dla co Chcę zrobić? – Tenatious

+0

na pewno będziesz potrzebował czegoś takiego, ponieważ filetransfer przez ajax nie jest możliwy bez pomocy. Na przykład jqueryform.js http://malsup.com/jquery/form/ ma również ajaxForm do załadowania na lot, bardzo łatwo użyj http://malsup.com/jquery/form/#ajaxForm –

+1

Tak mylić, od czego zacząć xD – Tenatious

Powiązane problemy