フロントエンドでAngular ng-file-upload
(https://github.com/danialfarid/ng-file-upload)を使用してファイルアップロードプロセスを管理しています。Scala Play Framework Anggular ng-file-uploadを使用した画像アップロード
残念ながら、フォームには複数のファイルを含む複雑なオブジェクトが含まれています。サーバー側のMultipartFormData
(https://www.playframework.com/documentation/2.5.x/ScalaBodyParsers)を使用すると、アップロードされたコンテンツが正常に分解され、request.body
から読み取ることができます。中にネストされたデータオブジェクトのキーを期待し
(...)サーバの実装:
さて、私の驚きに、私は
Json Objects
シンプルではなく、むしろ妙に形成されたデータ型を持っていない、としてng-file-upload
ウェブサイト上で説明しました.keyまたは[key]形式。 例:data:{rec:{name: 'N'、pic:file}}:rec [name] - > N、rec [pic] - >ファイル
data:{rec:{name: 'N 'PIC:ファイル}、objectKey:' として送られた.K '}:rec.name - > N、rec.pic - >ファイル
は、これまでのところ私は、共通のMultipartFormData.Part
にすべてのデータを持って管理していますタイプ、このようDataPart
とFilePart
使用:
Iterable[Part]
が残っています
val opts = body.dataParts.map {
case (key, values) => DataPart(key, values.head)
}
val parts = opts ++ body.files
:
0 = {[email protected]} "DataPart(arabic[active],false)"
1 = {[email protected]} "DataPart(english[active],true)"
2 = {[email protected]} "DataPart(english[url],2132132132)"
...
7 = {[email protected]} "FilePart(english[image],fb_icon_325x325.png,Some(image/png),TemporaryFile(/tmp/playtemp5909927824995768544/multipartBody8348573128070542611asTemporaryFile))"
各オブジェクトname
には、そのJson構造のkey
とそれに対応するvalue
が含まれています。今、代わりにkey[level1][level2]
の私は、私の場合には、オブジェクトにそれを解析したいと思います:
case class PcBanner(english: PcBanners, arabic: PcBanners, kurdish: PcBanners)
case class PcBanners(active: Boolean, url: Option[String], image: Option[String])`
私はあなたのアイデアを得たいと考えています。
質問
私はオブジェクトにそれに合うようにしようとname
文字列を解析しようとすることができます知っているが、私は途中で何らかの方法ミスを犯したと信じています。 フィールド名を参照として使用して、この構造体をオブジェクトに解析する方法はありますか? Play機能のビルドまたはそれに類するもの?
ありがとうございました!
データがそのように送信される理由は、マルチパート/フォームデータ要求であるためです。それは、値が文字列であるいくつかの入力キーと値のペアを持つHTMLフォームと考えることができます。代わりに 'JSON.stringify()'を使ってデータをjson文字列に変換し、次にその文字列を読み込み、サーバライブラリを使ってjson文字列をモデルオブジェクトに変換します。 – danial
@danial前に 'JSON.stringify()'を使っていましたが、画像をJSONに収める方法がわかりません。バイトを文字列として送信するだけでいいですか? – Atais
このようなファイルは別に送信されません。{file:file、otherData:JSON.stringify(myData)} ' – danial