来玩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快速教程”系列文章
来玩Play框架07 静态文件的更多相关文章
- CodeIgniter(3.1.4)框架使用静态文件(js,css)
调整目录结构: 可以在控制器中这样加载视图: * 加载url辅助类. views视图中可以这样引用静态文件: 则最终的静态文件url会生成这样:
- go gin框架 static 静态文件
项目结构: DemoPro: .. .. static/ test.txt .. router := gin.Default() router.Static("/static", ...
- Swift3.0服务端开发(二) 静态文件添加、路由配置以及表单提交
今天博客中就来聊一下Perfect框架的静态文件的添加与访问,路由的配置以及表单的提交.虽然官网上有聊静态文件的访问的部分,但是在使用Perfect框架来访问静态文件时还是有些点需要注意的,这些关键点 ...
- django入门-静态文件-part6
尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6517553.html 完全翻译自官方文档 https://docs.djangoproje ...
- django源码分析——静态文件staticfiles中间件
本文环境python3.5.2,django1.10.x系列 1.在上一篇文章中已经分析过handler的处理过程,其中load_middleware就是将配置的中间件进行初始化,然后调用相应的设置方 ...
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
基于 Vue.js 之 iView UI 框架非工程化实践记要 像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...
- flask模板应用-加载静态文件:添加Favicon,使用CSS框架,使用宏加载静态资源
加载静态文件 一个Web项目不仅需要HTML模板,还需要许多静态文件,比如CSS.JavaScript文件.图片和声音声.在flask程序中,默认需要将静态文件存储在与主脚本(包含程序实例的脚本)同级 ...
- 关于jdango框架静态文件配置的问题
一: 我们首先要知道什么是静态文件: 静态文件就是我们的HTML,css,图片等文件. 二: 我们要知道我们的Django框架是一个web服务器,那么web服务器,我们是通过一个url地址来访问它的, ...
- 【玩转Golang】beego下实现martini中的透明式静态文件服务(static folder)效果。
出于效率等原因,最近将web框架由martini切换为了beego,其他地方都很平顺,只是两个框架的handler签名不一致,需要修改,所以耗时较长,这是预计到的.但是有一个地方没有预计到,也耗费了较 ...
随机推荐
- JDBC MySQL 多表关联查询查询
public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...
- TCP/IP基础
TCP/IP 是用于因特网 (Internet) 的通信协议. 计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述. 什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的 ...
- 在 Windows7 上按照 MySQL5.7
在 Windows7 上按照 MySQL5.7 1.从官网下载最新版本的 MySQL,这里下载的是 mysql-5.7.17-win32: 2.将下载的 mysql-5.7.17-win32.zip ...
- 一种简单,轻量,灵活的C#对象转Json对象的方案
简单,是因为只有一个类 轻量,是因为整个类代码只有300行 灵活,是因为扩展方式只需要继承重写某个方法即可 补充:修正无法处理可空值类型的bug 首先我将这个类称之为JsonBuilder,我希望它以 ...
- 一步一步使用ABP框架搭建正式项目系列教程之本地化详解
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 扯扯本地化 ABP中的本地化 小结 扯扯本地化 本节来说说本地化,也有叫国际化.全球化的,不管怎么个叫法,反正道理都是一 ...
- [大数据之Yarn]——资源调度浅学
在hadoop生态越来越完善的背景下,集群多用户租用的场景变得越来越普遍,多用户任务下的资源调度就显得十分关键了.比如,一个公司拥有一个几十个节点的hadoop集群,a项目组要进行一个计算任务,b项目 ...
- Android-Eclipse-INSTALL_FAILED_UPDATE_INCOMPATIBLE错误
电脑重装了系统,环境问题一大堆,唉,搞死人,这不,今天就出现了这样的一个奇怪的问题. INSTALL_FAILED_UPDATE_INCOMPATIBLE 最后搜了一遍,发现是因为已经安装了这个包,包 ...
- linux安装mvn后提示权限不够
Maven - 环境配置 Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK. 系统要求 项目 要求 JDK Maven 3.3 要求 JDK 1.7 或以上Maven 3 ...
- 00.Web大前端时代之:HTML5+CSS3入门系列~Bug反馈文章
感谢广大网友的热心提醒,现已发现如下错误: 感谢 “ ”对画布笔记系列的反馈(QQ:350223285) 这个是失误,strokeStyle和stroke对应 待续.... 欢迎提出更多问题,感谢大家 ...
- 《JavaScript高级程序设计》读书笔记 2
1,动态模型模式 function Person (name,age,job) { this.name=name; this.age=age; this.job=job; if(typeof this ...