作者: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 静态文件的更多相关文章

  1. CodeIgniter(3.1.4)框架使用静态文件(js,css)

    调整目录结构: 可以在控制器中这样加载视图: * 加载url辅助类. views视图中可以这样引用静态文件: 则最终的静态文件url会生成这样:

  2. go gin框架 static 静态文件

    项目结构: DemoPro: .. .. static/ test.txt .. router := gin.Default() router.Static("/static", ...

  3. Swift3.0服务端开发(二) 静态文件添加、路由配置以及表单提交

    今天博客中就来聊一下Perfect框架的静态文件的添加与访问,路由的配置以及表单的提交.虽然官网上有聊静态文件的访问的部分,但是在使用Perfect框架来访问静态文件时还是有些点需要注意的,这些关键点 ...

  4. django入门-静态文件-part6

    尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6517553.html 完全翻译自官方文档 https://docs.djangoproje ...

  5. django源码分析——静态文件staticfiles中间件

    本文环境python3.5.2,django1.10.x系列 1.在上一篇文章中已经分析过handler的处理过程,其中load_middleware就是将配置的中间件进行初始化,然后调用相应的设置方 ...

  6. 基于 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 时代,包括其插件在需要时就引 ...

  7. flask模板应用-加载静态文件:添加Favicon,使用CSS框架,使用宏加载静态资源

    加载静态文件 一个Web项目不仅需要HTML模板,还需要许多静态文件,比如CSS.JavaScript文件.图片和声音声.在flask程序中,默认需要将静态文件存储在与主脚本(包含程序实例的脚本)同级 ...

  8. 关于jdango框架静态文件配置的问题

    一: 我们首先要知道什么是静态文件: 静态文件就是我们的HTML,css,图片等文件. 二: 我们要知道我们的Django框架是一个web服务器,那么web服务器,我们是通过一个url地址来访问它的, ...

  9. 【玩转Golang】beego下实现martini中的透明式静态文件服务(static folder)效果。

    出于效率等原因,最近将web框架由martini切换为了beego,其他地方都很平顺,只是两个框架的handler签名不一致,需要修改,所以耗时较长,这是预计到的.但是有一个地方没有预计到,也耗费了较 ...

随机推荐

  1. Git使用详细教程(二)

    分支 其实在项目clone下来后就有一个分支,叫做master分支.新建分支的步骤:右键项目→Git→Repository...→Branches... master分支应该是最稳定的,开发的时候,建 ...

  2. 在redis中使用lua脚本让你的灵活性提高5个逼格

    在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...

  3. Memcached简介

    在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法.其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率. 除了能够提高服务的运行效 ...

  4. java中文乱码解决之道(九)-----总结

    乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了.LZ之所以写这个系列博客就是因为遇到 ...

  5. Linux下UPnP sample分析

        一.UPnP简介   UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术,建立在TCP/IP.HTTP协 ...

  6. .NET Web开发技术简单整理

    在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...

  7. Thinking in Unity3D

    关于<Thinking in Unity3D> 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙.不得不说,笔者最近几年的引擎 ...

  8. 压缩javascript文件方法

    写在前面的话:正式部署前端的时候,javascript文件一般需要压缩,并生成相应的sourcemap文件,对于一些小型的项目开发,这里提供一个简单的办法. ======正文开始====== 1.下载 ...

  9. fir.im Weekly - 揭秘 iOS 面向协议编程

    本期 fir.im Weekly 重点推荐关于 iOS 面向协议编程相关文章,还有 iOS 多线程安全.Swift 进阶.Android MVVM 应用框架.Android 蓝牙实践等技术文章分享和工 ...

  10. salesforce 零基础学习(五十九)apex:param使用以及相关的疑惑

    做web项目难免要从一个页面传参数,解析参数中的值进行相关处理以后跳转到其他页面,VF中也不例外.使用传参的标签为apex:param. apex:param标签不可以单独使用,需要作为子标签嵌套在相 ...