3

実稼働モードでファイルシステム(パブリックアセットディレクトリ)にファイルをアップロードすると、ファイルは後で提供されません。cleanコマンドを実行する必要があります。ファイルが見つからないというエラーが表示されます。どうすればこれを回避できますか?

4

3 に答える 3

3

アクションの結果としてファイルを送信することは可能ですが(あなたが証明したこと) 、パブリックアップロードをアプリケーションの外部に保存し、一般的なHTTPサーバーで提供することをお勧めします。

理由は簡単です:

  • ファイルをすばやく追加/置換する必要がある場合は、一般的なFTPクライアントで実行できます
  • サードパーティのクライアントでファイルを追加する場合は、アプリを再デプロイする必要はありません
  • HTTPサーバーは静的ファイルをより高速に処理し、キャッシュヘッダーをすぐに管理します(それがその仕事であるため)。サーバーはファイルを結果に書き換える必要はありません。
  • このためにサブドメインを使用すると、CDNソリューションを作成できます
  • アプリのコードはわずかに小さい
于 2013-01-05T14:56:00.310 に答える
3

私はこの答えが好きではありませんが、これを簡単に達成する方法はありません。

なぜなら、「それは物事を行うのにあまり良い方法ではなく、信頼性が低く、拡張性がなく、セキュリティ上の懸念がある」からです。(私はこれに同意しませんが、それは事実です)。

最善の解決策は、ファイルをデータベースに保存するか、S3などの別のサービスにアップロードすることです。

于 2013-01-05T13:46:10.017 に答える
0

カスタムアセットコントローラーを追加しましたが、正しく機能しているようです。

package customcontrollers

import controllers.Assets
import play.api.mvc.Action
import play.api.mvc.AnyContent
import play.api.mvc.Results.Ok
import play.api.Play.current
import play.api._

object UploadedImageAssets {
  def at(file: String): Action[AnyContent] = Action {
    Ok.sendFile(Play.getFile("public/uploaded-images/"+file))
  } 
}
于 2013-01-05T14:42:36.203 に答える