2016-05-07 12 views
0

From the docsの生産でそれらを利用可能にする:再生!画像をアップロードおよび/資産/画像

アプリケーションをパッケージ化すると、すべてのサブプロジェクトを含むアプリケーションのすべての資産は、/ターゲットに、単一のjarに集約されていますmy-first-app-1.0.0-assets.jarです。このジャーは配布アプリケーションに含まれているため、Playアプリケーションで配信できます。このジャーは、資産をCDNまたはリバースプロキシに展開するためにも使用できます。

私のアプリケーションではいくつかの画像がアップロードされていますが、開発では問題なく動作しますが、実際にはエラーが発生します。

問題は、ページに表示するにはpublic/imagesフォルダ内のファイルが必要ですが、実際には動作しません。

ユーザーに画像をアップロードしてもらうにはどうしたらいいですか?

別のアセットパスなどを作成する必要がありますか?

注:コードを投稿していないのは、ドキュメントの標準アップロード方法だからです。私が何をしたか

答えて

0

私は、これは単なる愚かな回避策かもしれないという事実を認識です。

def show(name: String) = Action { implicit r => 
    val rootPath = Play.application.path 
    val path = FileSystems.getDefault().getPath("/" + rootPath + "/public/images/"); 
    Logger.info("serving image: " + path.toString + "/" + name) 
    Ok.sendFile(new java.io.File(path.toString + "/" + name)) 
    } 

は基本的にこの全体の操作は、開発に失敗しますが、それは生産に動作します。
GET   /images/:name        controllers.ImageController.show(name: String) 

は、私のような画像を提供していますシンプルなアクションを作成しました。

展開した後、私は、例えば

your_root/target/universal/stage/public/images 

手動でフォルダを作成した今、すべてのイメージはで入手できます。

/images/name_of_the_image 

注:内部バージョン=の2.4.xを再生

+1

アップロードファイルアプリケーションディレクトリは推奨されません。アプリをもう一度デプロイする必要がある場合はどうなりますか?アプリケーションの同じディレクトリにありますが、アプリケーションコードの一部ではないファイル(アップロードされた画像)について心配する必要があります。私の推奨は、外部ディレクトリを使用し、 'Ok.sendFile'を使ってファイルを配送することです。また、[パストラバーサル攻撃](https://www.owasp.org/index.php/Path_Traversal)にも注意する必要があります。 – marcospereira

+0

@marcospereira、ヒントのおかげで –