2016-10-18 2 views
6

Ich verwende derzeit die Drag & Drop-Funktion von Primefaces fileUpload-Komponente. Es funktioniert einwandfrei, aber ich möchte Dateien direkt hochladen, indem ich sie irgendwo auf meine Seite ziehe, ohne auf eine Schaltfläche klicken zu müssen. dieseJSF Fileupload durch Ziehen der Datei irgendwo auf die Seite

Ich habe versucht:

$('.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"); 
} 

Das Problem ist, dass dies für den Dateinamen funktioniert, aber nicht für die Datei selbst. Ist das der richtige Ansatz, oder gibt es eine Möglichkeit, die files-Liste an Primefaces fileUpload weiterzuleiten und die Dateien programmgesteuert ohne Verwendung der GUI-Komponente zu senden?

+0

haben Sie schon versucht, diese [SO beantworten] (http://stackoverflow.com/questions/18439699/primefaces-file-upload-drop-file-outside-of-pfileupload-anywhere-in-the-page) Vor? – malaguna

+0

Ja, aber es hat nicht funktioniert. Ich bin mir nicht sicher, ob diese Lösung noch für Primefaces 6.0 funktioniert. – sinclair

+2

Ich bin nicht sicher, ob es Ihren Bedarf erfüllt, aber es gibt dieses Ding: [Dropzone] (http://stackoverflow.com/questions/38018632/use-dropzone-with-jsf) – sunofkyuss

Antwort

-2

Haben Sie versucht dragDropSupport="true"?

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

Es funktioniert sehr gut für mich.

+2

Dies beantwortet nicht * "Ich möchte Dateien direkt hochladen, indem ich sie irgendwo auf meine Seite ziehe" * – BalusC

0

Es ist bereits in der Vitrine. http://www.primefaces.org/showcase/ui/file/upload/auto.xhtml

Benötigen Sie auto="true", um dies zu tun.

Update:

Führen Sie Javascript folgenden kurz nach der Datei-Upload div Rendering. Dann können Sie erlaubte Dateitypen überall auf der Seite ablegen.

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

Dies beantwortet nicht * "Ich möchte Dateien direkt hochladen, indem ich sie irgendwo auf meine Seite ziehe" * – BalusC

+0

@BalusC Was genau antwortet es nicht? Kannst du es erklären ... – sura2k

+0

Äh, die Frage besagt das. Versuchen Sie, die Frage (und alle Kommentare und andere Antworten) zu lesen, bevor Sie eine Antwort/einen Kommentar verfassen. – BalusC

Verwandte Themen