16

ユーザーが写真をサーバーにアップロードして表示できるようにしようとしています。アップロードは、このガイドで説明されているとおりに行われます。コードは次のとおりです。

def upload = Action(parse.multipartFormData) { request =>
  request.body.file("picture").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"
    )
  }
}

アップロードされた画像を、見たいユーザーに提供する方法がわかりません。現在、私は自分のマシンでサーバーをホストしているため、ガイドのコード スニペットはファイルを私の D: ドライブに書き込みます。私が見る限り、2つのオプションがあります:

  1. 私のプロジェクト (アセット専用のプロジェクト) の /public フォルダーの下に写真を保存します。ここを参照してください: http://www.playframework.org/documentation/2.0/Assets

  2. ドライブからカスタムの場所に画像を提供する独自のコントローラーを作成します。

1については、それが資産の目的であるかどうかはわかりません。2 については、そのようなコントローラーの書き方がわかりません。

4

3 に答える 3

18

簡単な例は

def index = Action {
  Ok.sendFile(new java.io.File("/tmp/fileToServe.pdf"))
}

https://www.playframework.com/documentation/2.4.x/ScalaStream#Serving-filesに「ファイルの提供」セクションがあり、ファイルの提供方法を​​説明しています

于 2012-08-10T18:07:28.390 に答える
9

2.0.3 は、これに (誤用) 使用される可能性のある外部資産コントローラーを備えています。ただし、そのようなコントローラーを作成することは魔法ではありません。すべてのアップロードが保存される事前定義されたフォルダーがあり、そこから読み取ることができます。データベースに (一意の) ファイル名を保存します。

別のアプローチは、アップロードされたファイルをデータベースに保存することです。これは、MongoDBのGridFSで行います。カスタム コントローラーはそれらをユーザーに返します。このようにして、データが 1 つの中央の場所に保存されるため、バックアップと復元も簡単になります。

于 2012-07-12T12:40:49.447 に答える
0

次のような新しいルートを追加できます。

GET     /myFiles/*file               controllers.Assets.at(path="/tmp", file)
于 2013-01-29T10:32:48.287 に答える