7

sto usando play framework 2.1.2utilizzando Java e sto creando al fine di caricare più file e il mio codice è qui:Come caricare più file usando il framework di gioco?

@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"> 

      } 

voglio caricare solo doc e file pdf.

come limitare il modulo per caricare solo file doc e pdf?

posso farlo con java ma sto cercando il codice html.

dopo questo voglio archiviare più file nella memoria permanente nel mio computer.

e stampare il nome del file che ho caricato.

il mio codice:

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()); 
} 

è memorizzare file nella directory temporanea ma voglio negozio per posizione permanente non sulla directory temporanea come un file non file temporaneo come se carico a.docx voglio per memorizzare questo file nella memoria con il nome a.docx.

Non voglio archiviare il file nel database.

e come elencare tutti i file che ho caricato per nome file?

ho trovato qualche domanda, ma non ho ricevuto risposte perché quella domanda è per la versione precedente.

dammi qualche idea per risolvere questo problema.

+0

controllare questo link Spero che aiuta [FileUpload] (http://www.erol.si/2014/10/handle-file-uploads-in-play-framework- 2-x-java /) –

risposta

7

Ecco come ho implementato il mio. Mi scuso se ho fatto qualche errore da qualche parte. L'ho "rifattorizzato" in modo che non assomigli al mio codice di produzione.

In HTML ho:

<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> 

Nel mio regolatore ho:

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(); 
} 

Proprio come Kris detto, si dovrà ottenere CommonIO di Apache

Si può facilmente fare questo compra aggiungendo questo nel tuo Build.scala trovato in/PlayProject/project:

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 questa implementazione, è possibile memorizzare i file ovunque sul computer in cui è stato specificato in File newFile1. Ma dovrai usare un database se vuoi elencare i tuoi file. Ma è sufficiente memorizzare il percorso del file come stringa (varchar) nel database. Lascerò questa parte a te per capire come non so come si desidera gestire il recupero dei file.

È possibile limitare l'utente a caricare solo determinati tipi di file utilizzando Javascript. Avere Javascript convalidare la forma controllando il nome del file: Ecco un esempio:

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

Spero che tutto ciò aiuti.

1

Un modo potrebbe essere è quello di utilizzare un parser di corpo personalizzato che può prendere una directory specificata e salvare lì i file caricati. Ma devi aggiungere qualche codice Scala al progetto. Ecco il succo:

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