X5 使用 blobImage组件上传图片,通过UI2 使用BIZData,Baas 两种显示图片

用户想查看通知公告,同时通知公告是以列表详细展示,列表界面带有用户自定义上传的图标。在此处,由于使用的场景不同。前端UI2 使用两种方式展示,BizData和Baas。

1 内网系统存在只有系统内的用户可以查看的数据, 此时用户必须登录之后才能查看,使用BizData

2 还有一种业务场景,信息是发布到公网,不需要登录,公众用户可以直接查看,此时不需要用户登录。使用Baas

那么信息维护的界面是系统管理员维护,使用统一的维护界面。维护界面是需要登录系统的所以直接使用UI2 的BizData 做的,同时组件blobImage  只支持BizData

X5 中维护的界面如下。

X5 前端UI2 支持使用BizData,Baas ,cdata(不描述)

需要登录的页面UI2 的展示效果:


公众页面,不需要登录的页面UI2 的展示效果。实际上使用Baas做页面展示,图片显示的时候 需要使用BaasService获取Blob字段返回InputStream来显示。

其实从界面展示的实际效果来看根本就没有设么区别,都是列表显示,列表前面带有自定义图标。

那么下面重点贴出 对于blobImage 组件上传图片存在数据库表中的一个blob类型的字段中。

在X5 中blbo类型字段的值需要自己实现获取字段

那么在需要登录的界面如何获取blob字段,并且通过image展示出来呢?

主要使用了list组件做列表,那么blob在image中显示使用的代码如下 




<div component="$UI/system/components/justep/list/list" class="x-list"

        data="applicationResult" limit="-1" xid="list1" style="overflow: auto;height:calc(100% - 150px);">

        <ul class="x-list-template resourcesDialogUL" xid="listTemplateUl1">

          <!--  bind-style="{'background-color':$object===$model.newsData.getCurrentRow() ? '#428bca':''}" --> 

          <li xid="li1" class="media" bind-click="selectRowClick">

            <div xid="mediaLeft2" class="media-left">

              <img src="" alt="" xid="image4" class="img-rounded" bind-attr-src="$model.setImg($object, $element)"/>

            </div> 

            <div class="media-body media-body-cus" xid="mediaBody2" bind-click="mediaBody2Click">

              <div component="$UI/system/components/bootstrap/row/row" class="row"

                xid="row1">

                <div class="col col-xs-6" xid="col2">

                  <h4 class="media-heading serviceName" xid="h42" bind-text="ref(&quot;SERVICE_NAME&quot;)"><![CDATA[服务名称]]></h4>

                </div> 

                <div class="col col-xs-3" xid="col3">

                  <div xid="div1">

                    <span xid="span2"><![CDATA[申请时间:]]></span> 

                    <span xid="span7" bind-text="$model.applyTimeformatDate($object)"/>

                  </div>

                </div> 

                <div class="col col-xs-3" xid="col4">

                  <div xid="div2">

                    <span xid="span8">审批时间:</span> 

                    <span xid="span9" bind-text="$model.approvalTimeformatDate($object)"/>

                  </div>

                </div>

              </div> 

              <div xid="div4">

                <span xid="span15" bind-text="ref(&quot;DESCRIPTION&quot;)" class="cus_des"/>

              </div>

            </div> 

            <div class="media-right" xid="mediaRight2">

              <div component="$UI/system/components/justep/button/buttonGroup"

                class="btn-group" tabbed="true" xid="buttonGroup4" style="width:72px;">

                <a component="$UI/system/components/justep/button/button"

                  class="btn btn-link" label="测试" xid="button3" onClick="testBtnClick"

                  style="display:inline-block;" icon="dataControl dataControl-format">

                  <i xid="i7" class="dataControl dataControl-format"/> 

                  <span xid="span16">测试</span>

                </a>

              </div>

            </div>

          </li>

        </ul>

      </div>





2  setImg 方法代码如下:


Model.prototype.setImg = function(row, element) {

var loginDate = new Date();

var fid = row.val("fServiceID");

var imageAvatar = getImageAvatar(fid, loginDate.getTime());

$(element).one('error', function() {

$(this).attr('src', defaultAvatar);

});

return imageAvatar;

};

```

getImageAvatar 方法如下


```var getImageAvatar = function(personID, lastModified) {

var params = {

process : '/natures/service/process/serviceBrowsing/serviceBrowsingProcess',

activity : 'mainActivity',

action : 'blobDownloadAction',

blobDataModel : '/natures/service/data', //要查询的blob字段所在的data

blobConcept : 'NA_ServiceRegister', //要查询的blob字段对应的概念名称

blobRelation : 'fServiceImage',//要查询的blob字段对应的字段名称

blobConceptValue : personID,//对应的blob所在的概念的主键的 取值的字段。其实可以理解成 where条件后面的值。

$lastModified : lastModified

};

var url = new justep.URL(require.toUrl("$UI/system/components/justep/blob/server/download.j"));

//$UI/system/components/justep/blob/server/download.j 系统字段的

url.setParam(params);

return url.toString();

};

blobDownloadAction 这个是系统自带的action  返回InputStream 

public static InputStream query(String blobDataModel, String blobConcept, String blobRelation, String blobConceptValue) throws Exception {

return BlobUtils.query(blobDataModel, blobConcept, blobRelation, blobConceptValue);

}



在不能直接调用Action,不需要登录的界面要显示带blob 的列表。此时我们需要自己动手写service。然后前端调用baasService

使用baas data 做的带显示blob的list 上面的差不多,代码如下

<ul component="$UI/system/components/justep/list/list" class="x-list x-list-template bdc-news-list"

                    xid="list3" data="tzggList">

                    <li xid="li2" bind-click="openDetial">

                      <div xid="mediaLeft2" class="media-left">

 bind-attr-src="$model.setImg($object, $element)" alt="" xid="showImage" class="img-rounded"

                          />

                      </div>

                      <div class="media-body media-body-cus" xid="mediaBody2" > 

                      <a bind-text="val(&quot;FTITLE&quot;)" xid="a1"/> 

                      <span bind-text="val(&quot;FOPENTIME&quot;)" xid="span5"/>

                      </div>

                    </li>

                  </ul>


setImg 方法如下


Model.prototype.setImg = function(row, element) {

var loginDate = new Date();

var fid = row.getID();

var imageAvatar = this.getImageAvatar(fid);

return imageAvatar;

};



getImageAvatar 方法如下:

Model.prototype.getImageAvatar = function(FID) {

var self=this;

debugger;

var showImage = this.getElementByXid("showImage");

var url = window.location.origin+require.toUrl("/baas/taszrzy/tzgg/getBlobColumn?FID=" + FID);

return url;

};

其中 getBlobColumn 是自己定义的一个baasService 如下



package taszrzy;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.sql.Blob;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import javax.naming.NamingException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSONObject;

import com.justep.baas.Utils;

import com.justep.baas.action.ActionContext;

public class Tzgg {

public static JSONObject getBlobColumn(JSONObject params, ActionContext context) throws Exception,ServletException, IOException {

HttpServletRequest request = (HttpServletRequest)context.get(ActionContext.REQUEST);

HttpServletResponse response = (HttpServletResponse)context.get(ActionContext.RESPONSE);

if(request.getMethod().equals("GET")){

doGet(request, response,params, context);

}

return null;

}

/**

get为获取文件 浏览或者下载

* @throws NamingException

* @throws SQLException

**/

private static void doGet(HttpServletRequest request, HttpServletResponse response,JSONObject params,ActionContext context)

throws ServletException, IOException, SQLException, NamingException {

getFile(request,response,params, context);

}

private static final int BUFFER_SIZE = 32768 * 8;

private static void getFile(HttpServletRequest request,

HttpServletResponse response,JSONObject params,ActionContext context) throws IOException, SQLException, NamingException {

String FID = request.getParameter("FID");

InputStream fis = getFListImage( FID,context);

response.setHeader("Cache-Control", "pre-check=0, post-check=0, max-age=0");

String fileNameKey = "filename";

String realFileName="列表.png";

response.addHeader("Content-Disposition", "inline; "+fileNameKey+"=\"" + realFileName + "\"");

OutputStream os = response.getOutputStream();

        byte[] buffer = new byte[BUFFER_SIZE];

        try {

        if(null!=fis){

        int read;

            while ((read = fis.read(buffer)) != -1) {

            os.write(buffer, 0, read);

            }

        }

        } finally {

        if(null!=fis){

        fis.close();

        }

        }

}

// 通过条件查询blob字段的值

private static InputStream  getFListImage(String FID, ActionContext context)throws SQLException, NamingException {

String str = "SELECT FLISTIMAGE FROM WW_INFOPUBLICITY WHERE FID='"+FID+"'";

Connection connection = null;

Statement statement = null;

try {

connection = context.getConnection("system");

statement = connection.createStatement();

ResultSet resultSet = statement.executeQuery(str);

if(resultSet.next()){

Blob blob=resultSet.getBlob("FLISTIMAGE");

if (Utils.isNotNull(blob))  return blob.getBinaryStream();

}

return null;

} finally {

try {

if (statement != null)

statement.close();

} catch (Exception exception) {

}

try {

if (connection != null)

connection.close();

} catch (Exception exception) {

}

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容