我可能有点夸张了标题,但当某些东西有时有效时,我认为它不起作用。
基本上我是存储在一个表图像使用3列。
- IMAGE_RIGHT BLOB(用于存储图像)
- mimeype_right VARCHAR2(50 BYTE)(用于存储mimetype)
- NOM_IMAGE_RIGHT VARCHAR2(255字节)(用于存储文件名)
这就是我如何显示图像的
if V_IMAGE_RIGHT is not null then
BEGIN
htp.p('<img style="float: right;" src="data:' || v_mimetype_right || ';base64,' || apex_web_service.blob2clobbase64(v_image_right) || '" height="100px">');
exception
when others then
htp.p('Err : ' || SQLERRM);
END;
end if;
在大多数情况下,它工作,与svgs,但有时有些文件似乎不工作,我得到这个错误">ORA-06502: PL/SQL"。
我尝试用我的一个没有工作的图像来获得它的内容在base64做一个选择查询,然后我创建了一个html文件来打印图像也通过使用base64内容,它在我的html文件上工作,但同样的过程自动化我的程序不工作。
成功了。正如Alex Poole的评论所说。P有32k字符的限制。
我就是这样做的。
首先我创建了这3个变量:
v_offset INTEGER := 1;
v_chunk_size INTEGER := 32000;
v_chunk VARCHAR2(32000);
然后改变了我显示图像的方式:
if V_IMAGE_LEFT is not null then
BEGIN
htp.p('<img src="data:' || v_mimetype_left || ';base64,');
WHILE v_offset <= LENGTH(v_image_left) LOOP
v_chunk := SUBSTR(v_image_left, v_offset, v_chunk_size);
-- afficher chaque segment à l'aide de HTP.P
HTP.P(v_chunk);
v_offset := v_offset + v_chunk_size;
END LOOP;
htp.p('" height="100px">');
END;
end if;