• Play框架文件上传


    最近正在使用Play框架搭建项目,做到图片上传部分有一些问题,所以记录一下解决情况

    1. Play框架的文件上传简介

    Play框架处理了HTTP文件上传,我们只需要调用就好了。上传的图片会首先缓存在tmp目录中,然后会在data/attachments/目录下生成一个图片文件,文件名的形式为一串UUID但是没有后缀名。

    这里写图片描述

    2. Models创建

    Play框架利用play.db.jpa.Blob类型来存储图片,所以Models中用于图片上传需要有两个成员变量:
    1.用于保存文件名的String
    2.用于保存图片的Bolb

    
    @Entity(name = "houses")
    public class Houses extends Model {
    
        // 主图
        public String mainimg;
    
        //主图的Bold
        public Blob mainimgblob;
    }
    

    3. 图片上传

    <!--上传图片-->
    <label class="back-upbtn color1">
      <i class="bg w-upimg-ico1"></i>本地上传
      <input type="file" id="file_upload" name="mainimgFile">
    </label>
    public static void publish( File mainimgFile) throws FileNotFoundException {
    
            // ************主图文件上传开始****************
            // 获取上传文件的名称
             houses.mainimg = mainimgFile.getName();
             houses.mainimgblob = new Blob();
             houses.mainimgblob.set(new FileInputStream(mainimgFile),
             MimeTypes.getContentType(mainimgFile.getName()));
            // ************主图文件上传结束*************************
             index();
    }

    注意: 页面file的name要和controller的参数一致

    4. 图片显示

    #{list items:house, as:'house'}
           <img title="${house.mainimg}" src="@{housePhoto(house.id)}">
        #{/list}
    /*
         * 跳转到图片上传测试页面
         */
        public static void totest() {
            Houses house = new Houses();
            house.id = (long) 12;//传一个house,house里保存了id,mainimg和mainimgblob
            render("newhouse/test.html",house);
        }
    
    /*
         * 图片显示
         */
        public static void housePhoto(long id) {
            final Houses house = Houses.findById(id);
            notFoundIfNull(house);
            response.setContentTypeIfNotSet(house.mainimgblob.type());
            renderBinary(house.mainimgblob.get());
        }

    向页面传递一个house,调用图片显示的方法就能获取house里面的blob,然后就能显示图片了

    还可以参考官方示例:
    http://www.jianshu.com/writer#/notebooks/8096021/notes/7355251/preview

  • 相关阅读:
    [转]利用EnteLib Unity Interception Extension和PIAB实现Trans
    [转]SynchronizationContext 综述
    【Java】JacksonUtils(Jackson ObjectMapper 工具类)
    【Java】GsonUtils(Gson 工具类)
    第十五章:指针类型
    第十六章:接口
    MySQL 的日志:binlog
    第八章:变量、常量和基础类型
    AUFS:多点合一,写时复制
    数据库多对多的几种形式(转载)
  • 原文地址:https://www.cnblogs.com/shuiyj/p/13185261.html
Copyright © 2020-2023  润新知