來玩Play框架07 靜態文件


作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝!

 

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") { <input type="file" name="picture">
    <p>
        <input type="submit">
    </p> }

 

增加動作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直接訪問。

 

總結

靜態文件

文件上傳

 

歡迎繼續閱讀“Java快速教程”系列文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM