zoukankan      html  css  js  c++  java
  • 来玩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快速教程”系列文章

  • 相关阅读:
    Python 类中方法的内部变量,命名加'self.'变成 self.xxx 和不加直接 xxx 的区别
    用foreach遍历 datagridView 指定列所有的内容
    treeView1.SelectedNode.Level
    YES NO 上一个 下一个
    正则 单词全字匹配查找 reg 边界查找 精确匹配 只匹配字符 不含连续的字符
    抓取2个字符串中间的字符串
    sqlite 60000行 插入到数据库只用不到2秒
    将多行文本以单行的格式保存起来 读和写 ini
    将秒转换成时间格式
    richtextbox Ctrl+V只粘贴纯文本格式
  • 原文地址:https://www.cnblogs.com/vamei/p/3722495.html
Copyright © 2011-2022 走看看