關於Play框架的靜態檔案
Play框架的主要功能是提供動態響應的內容。但一個網路專案中必然有大量的靜態內容,比如圖片、Javascript檔案、CSS檔案等。我下面介紹如何在Play專案中加入靜態檔案。
預設路徑
Play專案的靜態檔案一般儲存在根目錄下的public資料夾。新建Play專案時,routes檔案會有下面的預設記錄:
# Map static resources from the /public folder to the /assets URL path GET /assets/*file controllers.Assets.at(path="/public", file)
該記錄將/assets/下的URL,對應到專案的/public資料夾內的檔案。比如在專案的/public/images/test.jpg,就可以透過/assests/images/test.jpg這一URL訪問:
其它型別的靜態檔案,也都可以放入/public資料夾中。
在Play的模板中,也可以利用@routes.Assets.at("images/test.jpg")的方式,來呼叫靜態檔案的URL。
檔案上傳
客戶有時需要自行上傳檔案。我可以透過一個表單來讓客戶上傳。表單的模板app/views/upload.scala.html為:
@helper.form(action = routes.Application.upload, 'enctype -> "multipart/form-data") {}
增加動作uploadForm(),用於顯示該模板:
public static Result uploadForm() { return ok(views.html.upload.render()); }
檔案上傳的介面如下:
對於表單提交,我用動作upload()來處理:
public static Result upload() { MultipartFormData body = request().body().asMultipartFormData(); FilePart picture = body.getFile("picture"); if (picture != null) { String fileName = picture.getFilename(); String contentType = picture.getContentType(); File file = picture.getFile(); // get the root path of the Play project File root = Play.application().path(); // save file to the disk file.renameTo(new File(root, "/public/uploads/" + fileName)); return ok(fileName + " " + contentType + " uploaded"); } else { return badRequest("not a valid file"); } }
這裡透過multipart/form-data的加密方式,來傳輸靜態檔案。檔案傳輸成功後,我提取出File型別的檔案物件,並利用renameTo()方法,將檔案儲存到/public/uploads路徑下。
CoffeeScript和LESS
Play中可以用CoffeeScript編寫前端JavaScript。建立app/assets/javascripts資料夾。資料夾中放入.coffee檔案,比如test.coffee。Play將自動把.coffee檔案編譯成.js檔案。在模板中,可以透過
@routes.Assets.at("javascripts/test.js")
@routes.Assets.at("javascripts/test.min.js")
來分別呼叫.js檔案或壓縮後的.js檔案。用於routes中的設定,也可以用/assets/javascripts/test.js直接訪問。
Play還可以用LESS來編寫CSS檔案。在app/assets/stylesheets中放入.less檔案,Play將自動編譯。用
@routes.Assets.at("stylesheets/test.css")
@routes.Assets.at("stylesheets/test.min.css")
在模板中訪問。或者用/assets/stylesheets/test.css直接訪問。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2157/viewspace-2809046/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- go-zero微服務框架的靜態檔案服務Go微服務框架
- Sanic 靜態檔案
- nginx偽靜態檔案Nginx
- 7、靜態檔案的載入
- 關於MNN工程框架編譯出來的靜態庫和動態庫的使用框架編譯
- 關於php生成靜態問題PHP
- Go語言中介軟體框架 Negroni 的靜態檔案處理原始碼分析Go框架原始碼
- 關於Docx動態控制word模板檔案的資料
- Django 靜態檔案管理與部署指南Django
- asp .net core 靜態檔案資源
- 03 #### 讀取靜態檔案-圖片
- 啟動靜態檔案中介軟體
- go編譯靜態檔案到exeGo編譯
- url_for函式與靜態檔案函式
- vue中 靜態檔案引用注意事項Vue
- vue 靜態檔案上傳到七牛Vue
- asp.net core 系列之靜態檔案ASP.NET
- Django基礎二靜態檔案和ORMDjangoORM
- Django 教程之media和static靜態檔案Django
- 關於檔案的open方法
- SpringMVC下關於靜態資源訪問SpringMVC
- 關於靜態檔案目錄與模板引用和Nginx location塊的適配設定Nginx
- 使用nginx快取伺服器上的靜態檔案Nginx快取伺服器
- Asp.Net Core入門之靜態檔案ASP.NET
- 第三章-靜態檔案與inode
- django-驗證碼/靜態檔案處理Django
- fastapi 使用本地靜態檔案替換 swagger cdnASTAPISwagger
- Golang1.16 使用embed載入靜態檔案Golang
- .Net Core 中介軟體之靜態檔案(StaticFiles)
- SpringBoot static 靜態方法獲取 yml 配置檔案Spring Boot
- mysql關於ibdata檔案的理解MySql
- 關於單例及靜態變數測試單例變數
- 聊聊Play框架的模板框架
- node: anywhere隨啟隨用的靜態檔案伺服器伺服器
- golangWeb框架---github.com/gin-gonic/gin學習六(靜態檔案、模版、模版函式)GolangWeb框架Github函式
- 《Flask 入門教程》第 4 章:使用靜態檔案Flask
- Node構建一個靜態檔案伺服器伺服器
- sqlserver關於filestream檔案流、filetable檔案表的總結SQLServer