2012-09-06 3 views
5

Je suis nouveau sur Play et Scala. Mon exigence est de fournir un bouton de navigation où nous pouvons sélectionner plusieurs fichiers et télécharger ces fichiers. Voici le code que je l'ai écrit:Scala Play 2.0.2 téléchargement de fichiers multiples

dans le fichier scala.html:

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

dans le contrôleur:

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" 
    ) 
    } 
} 

Mais je ne suis pas en mesure de télécharger plusieurs fichiers. Une idée quelle est la question ici?

+1

Qu'est-ce qui se passe réellement lorsque vous téléchargez plusieurs fichiers sont-ils ignorés en silence? obtenez-vous un message d'erreur? – Jean

+0

quelqu'un peut-il me dire comment obtenir? je veux dire la taille de l'image uploaed. – Vicky

Répondre

3

d'abord tout ce que vous n'avez pas besoin

="multiple" 

Cela fonctionne de manière équivalente

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


Pour charger dans plusieurs fichiers, lors de la définition de votre formulaire doit avoir l'attribut

enctype="multipart/form-data" 

Par exemple, si vous utilisez les aides

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

ou si vous n'êtes pas

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

Dans votre contrôleur, vous voulez essayer quelque chose comme ça (pour Java, je suis sûr que son similaire à 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"); 

Ensuite, vous pouvez les utiliser pour parcourir les objets FilePart

Espérons que ce soit similaire dans la variable

Vive

+0

Merci beaucoup, si utile – Ducaz035

1

Vous pouvez essayer comme ça aussi bien si vous aimez:

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 (nouveau fichier ("/ tmp/myfiles /" + fichier.filename))} – robor78

Questions connexes