2012-09-06 10 views
5

Sono nuovo per Play e scala. Il mio requisito è quello di fornire un pulsante Sfoglia dove possiamo selezionare più file e caricare quei file. Ecco il codice che ho scritto:Scala Play 2.0.2 caricamento file multipli

nel file scala.html:

<input type="file" name="files" multiple="multiple" id="files" size="30"> 

nel controller:

def upload = Action(parse.multipartFormData) { request => 
    request.body.file("files").map { picture => 
    import java.io.File 
    val filename = picture.filename 
    val contentType = picture.contentType 
    picture.ref.moveTo(new File("/tmp/picture")) 
    Ok("File uploaded") 
    }.getOrElse { 
    Redirect(routes.Application.index).flashing(
     "error" -> "Missing file" 
    ) 
    } 
} 

Ma io non sono in grado di caricare più file. Qualche idea qual è il problema qui?

+1

Cosa succede in realtà quando si caricare più file stanno silenziosamente ignorati? Hai ricevuto un messaggio di errore ? – Jean

+0

qualcuno può dirmi come ottenere? intendo la dimensione dell'immagine sollevata. – Vicky

risposta

3

Prima di tutto non è necessario

="multiple" 

Questo funziona in modo equivalente

<input type="file" name="files" multiple id="files" size="30"> 


Per caricare in più file, quando si definisce il modulo deve avere l'attributo

enctype="multipart/form-data" 

Ad esempio, se si utilizzano gli helper

@helper.form(action = routes.MyController.submit(), 'enctype -> "multipart/form-data", 'id -> "myform") 

o se non sei

<form action=... enctype="multipart/form-data" id="myform"> 

Nel vostro controller che si vuole provare qualcosa di simile (per Java, sono sicuro che il suo simile a Scala)

//Get all files bound to the form when submitted 
List<FilePart> plate_files = request().body().asMultipartFormData().getFiles(); 
//Get files from a specific name or id 
FilePart myfile = request().body().asMultipartFormData().getFile("files"); 

Quindi è possibile utilizzare questi iterate attraverso gli oggetti FilePart

Si spera che sia simile in scala

Acclamazioni

+0

Grazie mille, così utile – Ducaz035

1

Si può provare in questo modo, così, se volete:?

def uploadFiles: Action[AnyContent] { request => 
    val files: Option[Seq[FilePart[TemporaryFile]]] = request.body.asMultipartFormData.map(_.files) 
    val filesJavaIO: Option[Seq[File]] = files map { fileSeq => fileSeq map { file => 
    file.ref.moveTo(new File("/tmp/myFiles")) 
    } 
    } 
Ok("File uploaded") 

} 
+0

request.body.files map {file => file.ref.moveTo (nuovo file ("/ tmp/myfiles /" + file.filename))} – robor78

Problemi correlati