2016-10-18 43 views
6

Aktualnie używam funkcji upuszczania & upuszczania składnika Primefaces fileUpload. Działa dobrze, ale chcę przesłać pliki bezpośrednio, przeciągając je w dowolne miejsce na moją stronę, bez konieczności klikania przycisku.Ładowanie pliku JSF przez przeciągnięcie pliku w dowolne miejsce na stronę

Próbowałem to:

$('.dropzone').on({ 
    'dragover dragenter': function (e) { 
     e.preventDefault(); 
     e.stopPropagation(); 
    }, 
    'drop': function (e) { 
     var dataTransfer = e.originalEvent.dataTransfer; 
     if (dataTransfer && dataTransfer.files.length) { 
      e.preventDefault(); 
      e.stopPropagation(); 
      $.each(dataTransfer.files, function (i, file) { 

       uploadFile([{"name": "filename", "value": file.name}]); 
      }); 
     } 
    } 
}); 

<p:remoteCommand name="uploadFile" action="#{bean.uploadFile()}" /> 

public void uploadFile(){ 
    String filename = 
     FacesContext.getCurrentInstance() 
     .getExternalContext().getRequestParameterMap().get("filename"); 
} 

Problemem jest to, że pracuje dla pliku, ale nie dla samego pliku. Czy jest to właściwe podejście, czy jest jakiś sposób na przesłanie listy do pliku Primefaces? Przesyłaj i prześlij pliki programowo bez użycia komponentu gui?

+0

próbowałeś to [SO odpowiedź] (http://stackoverflow.com/questions/18439699/primefaces-file-upload-drop-file-outside-of-pfileupload-anywhere-in-the-page) przed? – malaguna

+0

Tak, ale to nie zadziałało. Nie jestem pewien, czy to rozwiązanie nadal działa dla Primefaces 6.0. – sinclair

+2

Nie jestem pewien, czy to spełnia twoje potrzeby, ale jest to coś: [Dropzone] (http://stackoverflow.com/questions/38018632/use-dropzone-with-jsf) – sunofkyuss

Odpowiedz

-2

Czy próbowałeś dragDropSupport="true"?

<p:fileUpload fileUploadListener="#{fileUploadView.handleFileUpload}" mode="advanced" dragDropSupport="true" 
         update="messages" sizeLimit="100000" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" /> 

Działa to bardzo dobrze dla mnie.

+2

To nie odpowiada: "Chcę przesłać pliki bezpośrednio, przeciągając je w dowolne miejsce na moją stronę" * – BalusC

0

Jest już tam w gablocie. http://www.primefaces.org/showcase/ui/file/upload/auto.xhtml

Potrzebujesz auto="true", aby to zrobić.

Aktualizacja:

Wykonaj następujące javascript tuż po renderingu div wysyłania plików. Następnie możesz upuszczać dozwolone typy plików w dowolne miejsce na stronie.

$('.ui-fileupload').fileupload({ 
     dropZone: $(document) 
}); 
+2

Nie odpowiada to: * "Chcę przesłać pliki bezpośrednio, przeciągając je w dowolne miejsce na moją stronę" * – BalusC

+0

@BalusC Czego dokładnie nie odpowiada? Czy możesz wyjaśnić ... – sura2k

+0

Uh, pytanie to stwierdza. Spróbuj przeczytać pytanie (oraz wszystkie komentarze i inne odpowiedzi) przed opublikowaniem odpowiedzi/komentarza. – BalusC