7

ich bin mit play framework 2.1.2java und i Ansicht ist die Schaffung mehrere Dateien und mein Code zu laden ist hier:Wie lade ich mehrere Dateien mit Play Framework hoch?

@form(action = routes.upload.up, 'enctype -> "multipart/form-data") { 
      <input type="file" name="picture" accept="application/pdf" multiple="multiple"><br/> 
      <input type="submit" value="upload"> 

      } 

ich will nur doc und pdf-Datei hochladen.

Wie kann man das Formular so beschränken, dass nur Dokumente und PDF-Dateien hochgeladen werden?

Ich kann dies mit Java, aber ich bin auf der Suche nach HTML-Code.

danach möchte ich mehrere Dateien in den permanenten Speicher auf meinem Computer speichern.

und den Namen der Datei, die ich hochgeladen habe, ausdrucken.

mein Code:

public static Result up(){ 


MultipartFormData md=request().body().asMultipartFormData(); 

     List<FilePart>file; 

     file=md.getFiles(); 

     for(FilePart p: file){ 
     Logger.info(p.getFilename()); 
     } 

     return ok(file.get(0).getFilename()); 
} 

es ist Datei in temp-Verzeichnis Speicherung aber ich möchte Shop permanenten Standort nicht auf temporäre Verzeichnis als Datei nicht temporäre Datei wie wenn ich a.docx laden Ich möchte zu speichern diese Datei in den Speicher mit a.docx Namen.

Ich möchte keine Datei in der Datenbank speichern.

und Wie listet ich alle Dateien auf, die ich nach Dateiname hochgeladen habe?

Ich habe eine Frage gefunden, aber ich bekomme keine Antworten, weil diese Frage für die alte Version ist.

geben Sie mir eine Idee, um dieses Problem zu beheben.

+0

Check this link ich es hoffe, hilft [Fileupload] (http://www.erol.si/2014/10/handle-file-uploads-in-play-framework- 2-x-java /) –

Antwort

7

Hier ist, wie ich meine implementiert. Ich entschuldige mich, wenn ich irgendwo Fehler gemacht habe. Ich "refactored" es, so dass es nicht wie mein Produktionscode aussieht.

In HTML ich habe:

<form name="fileUploadForm" method="POST" enctype="multipart/form-data" action="@routes.Application.upload()"> 
     File 1: <br /> <input type="file" name="filePart1" id="filePart1"><br /> 
     File 2: <br /> <input type="file" name="filePart2" id="filePart1"><br /> 
</form> 

In meinem Controller habe ich:

public static Result upload() { 
    MultipartFormData body = request().body().asMultipartFormData(); 

    FilePart filePart1 = body.getFile("filePart1"); 
    FilePart filePart2 = body.getFile("filePart2"); 

    File newFile1 = new File("path in computer"); 
    File newFile2 = new File("path in computer"); 

    File file1 = filePart1.getFile(); 
    File file2 = filePart2.getFile(); 

    InputStream isFile1 = new FileInputStream(file1); 
    InputStream isFile2 = new FileInputStream(file2); 

    byte[] byteFile1 = IOUtils.toByteArray(isFile1); 
    byte[] byteFile2 = IOUtils.toByteArray(isFile2); 

    FileUtils.writeByteArrayToFile(newFile1, byteFile1); 
    FileUtils.writeByteArrayToFile(newFile2, byteFile2); 

    isFile1.close(); 
    isFile2.close(); 
} 

Genau wie Kris sagte, werden Sie den Apache bekommen müssen CommonIO

Sie können dies leicht tun Kaufen Sie dieses in Ihre Build.scala in/PlayProject/Projekt:

import sbt._ 
import Keys._ 
import play.Project._ 
import com.typesafe.config._ 

object ApplicationBuild extends Build { 
    val appDependencies = Seq(
    "commons-io" % "commons-io" % "2.4" //add this here 
) 
} 

In dieser Implementierung können Sie die Dateien überall auf Ihrem Computer speichern, wo Sie File newFile1 angegeben haben. Sie müssen jedoch eine Datenbank verwenden, wenn Sie Ihre Dateien auflisten möchten. Sie müssen den Dateipfad jedoch nur als String (varchar) in der Datenbank speichern. Ich werde diesen Teil Ihnen überlassen, um herauszufinden, wie ich nicht weiß, wie Sie mit dem Abruf von Dateien umgehen wollen.

Sie können den Benutzer so einschränken, dass nur bestimmte Dateitypen mit Javascript hochgeladen werden. Haben Sie Javascript Form Validierung durch Überprüfung des Dateinamens: Hier ist ein Beispiel:

<script> 
    var file1 = document.getElementById("filePart1").value; 
    if (file1.indexOf(".pdf") == -1) { 
     alert("Not a PDF file!"); 
    else { 
     document.fileUploadForm.submit(); 
    } 
</script> 

Hoffnung all dies hilft.

1

Eine Möglichkeit könnte sein, einen benutzerdefinierten Body Parser zu verwenden, der ein bestimmtes Verzeichnis übernehmen und die hochgeladenen Dateien dort speichern kann. Aber Sie müssen Scala-Code zum Projekt hinzufügen. Hier ist der Kern:

https://gist.github.com/nraychaudhuri/6349808

Verwandte Themen