6

Play と scala は初めてです。私の要件は、複数のファイルを選択してそれらのファイルをアップロードできる参照ボタンを提供することです。ここに私が書いたコードがあります:

scala.html ファイルで:

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

コントローラーで:

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

しかし、複数のファイルをアップロードすることはできません。ここで何が問題なのか分かりますか?

4

3 に答える 3

3

まずいらない

="multiple"

これは同等に機能します

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


複数のファイルにロードするには、フォームを定義するときに属性が必要です

enctype="multipart/form-data"

たとえば、ヘルパーを使用する場合

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

またはそうでない場合

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

あなたのコントローラーでは、このようなことを試してみたいと思います(Javaの場合、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");

次に、これらを使用して FilePart オブジェクトを反復処理できます

うまくいけば、scalaでも同様です

乾杯

于 2012-09-20T20:50:33.730 に答える
1

必要に応じて、次のようにすることもできます。

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

}
于 2015-11-09T10:50:04.397 に答える