2016-05-07 31 views
0

From the docs玩!上傳圖片,並讓他們在生產中可在/資產/圖像

當您打包應用程序時,所有資產的申請,包括所有的子項目,被合併爲一個罐子,在目標/我先APP-1.0.0-assets.jar。該jar包含在發行版中,以便您的Play應用可以爲它們提供服務。該jar還可以用於將資產部署到CDN或反向代理。

我在應用程序中上傳了一些圖片,在開發過程中一切正常,但在生產中它給了我錯誤。

問題是,我需要public/images文件夾中的這些文件才能在頁面上顯示它們,但它在生產中不起作用。

如何讓用戶上傳圖片並在/ public/images下提供圖片?

我是否必須創建另一個資產路徑或類似的東西?

注意:沒有發佈代碼,因爲它只是文檔中的標準上傳方法。

回答

0

我做了什麼:

我所知道的事實,這可能只是一個愚蠢的解決方法。

GET   /images/:name        controllers.ImageController.show(name: String) 

我創建了一個簡單的動作,供應像圖片:

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)) 
    } 

基本上這整個操作將失敗的發展,但它在生產工作。

部署後,我創建的文件夾手動如

your_root/target/universal/stage/public/images 

現在所有的圖像都可以在:

/images/name_of_the_image 

注:遊戲版本2.4.x的=

+1

上傳文件內不推薦應用程序目錄。當您需要再次部署您的應用程序時會發生什麼?您將不得不擔心與應用程序的同一目錄但不屬於應用程序代碼的文件(上載的圖像)。我的建議是使用外部目錄並使用'Ok.sendFile'來傳送文件。另外,你應該知道[Path Traversal攻擊](https://www.owasp.org/index.php/Path_Traversal)。 – marcospereira

+0

@marcospereira,感謝您的提示 –