【Oracle APEX开发小技巧 8 】图片回显及多图片URL在页面回显点击放大

用户在现场使用应用小程序拍照上传,存储的是图片的URL,那么如何将图片在APEX端回显呢?多图片URL在页面回显点击放大又是如何实现的呢?接下来请随我一探究竟

要实现上面的效果用到了图片拼接和遮罩层,具体操作:

图片拼接:

加载页初始化-创建动态操作-执行服务器端代码-PL/SQL-拼接图片并存储到页项中去

拼接URL,设置图片固定大小

代码:

DECLARE
    V_COUNT      NUMBER(20); --记录状态
    V_IMAGES_URL CLOB; --拼接图片
    V_ERR_MSG    NVARCHAR2(1000); --记录异常
    /**
     * CREATE BY: WXX
     * CREATE DATE: 2024/8/20 10:11
     * MODIFY BY:WXX    拼接图片  (多张)
     * MODIFY DATE:2024/8/26 19:11
     * DESCRIBE: P305拼接图片
     */
BEGIN
    --拼接图片
    V_IMAGES_URL := '<FIGURE CLASS="IMAGE">';
    FOR TIME IN ( SELECT IMAGES
                  FROM CHECK_CHANGE_RECORD
                  WHERE RECORD_ID = :P305_RECORD_ID
                    AND TENANT_ID = :USERTENANT
                    AND BASE_DEPT_ID = :BASE_DEPT_ID
        )
        LOOP
            FOR image_url IN (SELECT REGEXP_SUBSTR(TIME.IMAGES, '[^,]+', 1, LEVEL) AS IMAGE_URL
                              FROM DUAL
                              CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(TIME.IMAGES, '[^,]+')) + 1)
                LOOP
                    V_IMAGES_URL := V_IMAGES_URL || '<IMG SRC="' || image_url.IMAGE_URL || '" style="width:100px; height:100px;" >';
                END LOOP;
        END LOOP;
    V_IMAGES_URL := V_IMAGES_URL || '</FIGURE>';
    APEX_UTIL.SET_SESSION_STATE('P305_IMAGES', V_IMAGES_URL);
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        V_COUNT := -1;
        V_ERR_MSG := SQLERRM || CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
        JA_WRITE_LOG(:APP_PAGE_ALIAS || ':' || :APP_PAGE_ID || ':拼接图片', 'ERROR', V_ERR_MSG, :USER_ID,
                     :USERTENANT, :APP_NAME || ':' || :APP_ID);
END;


-- DECLARE
--     V_COUNT      NUMBER(20); --记录状态
--     V_IMAGES_URL CLOB; --拼接图片
--     V_ERR_MSG    NVARCHAR2(1000); --记录异常
--     /**
--      * CREATE BY: WXX
--      * CREATE DATE: 2024/8/20 10:11
--      * MODIFY BY:
--      * MODIFY DATE:
--      * DESCRIBE: P305拼接图片
--      */
-- BEGIN
--     --拼接图片
--     V_IMAGES_URL := '<FIGURE CLASS="IMAGE">';
--     FOR TIME IN ( SELECT IMAGES
--                   FROM CHECK_CHANGE_RECORD
--                   WHERE RECORD_ID = :P305_RECORD_ID
--                     AND TENANT_ID = :USERTENANT
--                     AND BASE_DEPT_ID = :BASE_DEPT_ID
--         )
--         LOOP

--             V_IMAGES_URL := V_IMAGES_URL || '<IMG SRC="' || TIME.IMAGES || '">';
--         END LOOP;
--     V_IMAGES_URL := V_IMAGES_URL || '</FIGURE>';
--     APEX_UTIL.SET_SESSION_STATE('P305_IMAGES', V_IMAGES_URL);
-- EXCEPTION
--     WHEN OTHERS THEN
--         ROLLBACK;
--         V_COUNT := -1;
--         V_ERR_MSG := SQLERRM || CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
--         JA_WRITE_LOG(:APP_PAGE_ALIAS || ':' || :APP_PAGE_ID || ':拼接图片', 'ERROR', V_ERR_MSG, :USER_ID,
--                      :USERTENANT, :APP_NAME || ':' || :APP_ID);
-- END;

说明:

1. 首先,将V_IMAGES_URL初始化为包含一个HTML标签`<FIGURE CLASS="IMAGE">`的字符串。

2. 使用FOR循环从CHECK_CHANGE_RECORD表中查询满足特定条件(RECORD_ID、TENANT_ID和BASE_DEPT_ID)的记录,并将结果存储在TIME变量中。

3. 对于每个TIME记录,再次使用FOR循环来处理IMAGES字段中的多个图片URL。这里使用了Oracle的正则表达式函数REGEXP_SUBSTR来分割IMAGES字段中的逗号分隔的图片URL。

4. 在内层循环中,将每个图片URL拼接到V_IMAGES_URL变量中,并在每个图片URL前添加一个`<IMG>`标签,设置图片的宽度、高度和边距样式。

5. 在所有图片URL都拼接完成后,将`</FIGURE>`标签添加到V_IMAGES_URL的末尾,完成整个图片列表的拼接。

6. 使用APEX_UTIL.SET_SESSION_STATE函数将拼接好的图片列表存储到会话状态中,项名为'P305_IMAGES'。

7. 异常处理部分:如果在执行过程中发生任何异常,将回滚事务,将V_COUNT设置为-1,并将错误信息存储在V_ERR_MSG变量中。然后调用JA_WRITE_LOG函数记录错误日志。

这段代码的主要功能是从数据库中获取一组图片URL,将它们拼接成一个HTML格式的图片列表,并将结果存储到会话状态中供后续使用。


遮罩层的设置:

页-CSS-文件URL(一定要记得导入对应CSS文件#WORKSPACE_FILES#static/layui-v2.6.13/layui/css/layui.css)

 设置固定图片大小,否则

对应CSS内嵌:
页-CSS-引入对应CSS文件URL-内嵌

代码如下

img{
    width: 90%;
    /* height: 50%; */
}

/*点击上传的文件(图片全屏放大)start*/
.bigImg {
    position: absolute;
    top: 50%;
    left: 50%;
    /*图片向左移动自身宽度的50%, 向上移动自身高度的50%。*/
    transform: translate(-50%,-50%);
}
/*遮罩层*/
.opacityBottom {
    width: 100%;
    height: 100%;
    position: fixed;
    background: rgba(0,0,0,0.8);
    z-index: 1000;
    top: 0;
    left: 0;
}

统一图片大小后的效果展示:

点击图片放大的效果展示:

在Spring Boot结合微信原生开发实现图片回显的场景,我们通常是在微信小程序获取到用户上传的图片,然后通过后端的Spring Boot应用将其保存并返回给小程序进行展示。以下是实现该功能的基本步骤: 1. 微信小程序端: - 用户在小程序触发上传图片的动作,调用微信提供的上传API将图片上传到微信服务器。 - 微信服务器会给小程序返回一个临时素材的media_id。 2. Spring Boot端: - 在Spring Boot后端,你需要提供一个接收文件的接口,该接口通过微信小程序传来的media_id来获取图片。 - 使用微信提供的API,通过media_id下载图片到服务器的临时目录或永久存储目录。 - 将图片保存到服务器的指定路径,并且可以生成一个可以访问该图片URL或者直接返回图片的二进制数据。 3. 图片回显: - 小程序端在获取到服务器返回的图片URL或二进制数据后,可以在小程序创建Image组件,将图片URL赋值给Image组件的src属性,从而实现图片回显。 以下是相关的代码实现示例(注意,以下代码仅供参考,实际开发需要结合业务逻辑以及微信API的具体要求进行调整): 微信小程序端(JavaScript): ```javascript wx.chooseImage({ count: 1, // 默认9 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 success (res) { const tempFilePaths = res.tempFilePaths wx.uploadFile({ url: 'https://yourserver.com/upload', // 你自己的后端接口地址 filePath: tempFilePaths[0], name: 'file', success (uploadRes) { const data = JSON.parse(uploadRes.data) // 使用返回的media_id进行后续操作,例如展示图片等 } }) } }) ``` Spring Boot后端(Java): ```java @RestController public class FileUploadController { @PostMapping("/upload") public ResponseEntity<?> handleFileUpload(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("文件不能为空"); } try { // 将文件保存到服务器指定路径 String filePath = "/path/to/save/" + file.getOriginalFilename(); file.transferTo(new File(filePath)); // 返回文件的访问路径或者其他信息 Map<String, Object> response = new HashMap<>(); response.put("filePath", filePath); // 举例,实际可能需要返回URL return ResponseEntity.ok(response); } catch (IOException e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件上传失败"); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值