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