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快速教程”系列文章

  • 相关阅读:
    BZOJ 1057 悬线法求最大01矩阵
    POJ 2248
    SPOJ
    51NOD
    2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest J. Judging the Trick
    POJ 1379 模拟退火
    POJ 2420 模拟退火
    Frontend 事后诸葛亮
    【Frontend】Alpha Review 展示博客
    ASE19 团队项目 alpha 阶段 Frontend 组 scrum5 记录
  • 原文地址:https://www.cnblogs.com/vamei/p/3722495.html
Copyright © 2011-2022 走看看