Hello all,
I'm facing a strange situation and maybe you could help me.
I've setup a simple procedure to load and show BLOB images from a table to browser in two different databases (10g and 11g) and different servers.
When I call in 10g:
https://server1:4443/chain/Images_API.Get_Gif?p_name=logorecord1.gif against 11R2g db1
I get the image
In the second 11g
https://server2:4443/chain/Images_API.Get_Gif?p_name=logorecord1.gif against 10gR2 db2
I get:
The image “https://orapetakjdev.net1.cec.eu.int:4443/chain/Images_API.Get_Gif?p_name=logorecord1.gif” cannot be displayed, because it contains errors.
my Oracle HTTP server logs and mod_plsql logs don't show any errors.
Any idea how to fix this ?
Alternatively in how to debug it ?
Thank you all in advance.
CREATE TABLE images (
id NUMBER(10) NOT NULL,
name VARCHAR2(50) NOT NULL,
image BLOB NOT NULL
)
CREATE OR REPLACE PACKAGE images_api AS
PROCEDURE load (p_name IN images.name%TYPE);
PROCEDURE get (p_name IN images.name%TYPE,
p_type IN VARCHAR2 DEFAULT 'gif');
PROCEDURE get_gif (p_name IN images.name%TYPE);
PROCEDURE get_jpeg (p_name IN images.name%TYPE);
END;
/
CREATE OR REPLACE PACKAGE BODY images_api AS
PROCEDURE Load (p_name IN images.name%TYPE) IS
v_bfile BFILE;
v_blob BLOB;
BEGIN
INSERT INTO images (id, name, image)
VALUES (images_seq.NEXTVAL, p_name, EMPTY_BLOB())
RETURN image INTO v_blob;
v_bfile := BFILENAME('IMAGE_DIR', p_name);
DBMS_LOB.fileopen(v_bfile, DBMS_LOB.file_readonly);
DBMS_LOB.loadfromfile(v_blob, v_bfile, DBMS_LOB.getlength(v_bfile));
DBMS_LOB.fileclose(v_bfile);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END;
PROCEDURE Get (p_name IN images.name%TYPE,
p_type IN VARCHAR2 DEFAULT 'gif') IS
v_blob BLOB;
BEGIN
SELECT image
INTO v_blob
FROM images
WHERE name = p_name;
OWA_UTIL.mime_header('image/' || p_type);
-- Start 9i method.
DECLARE
v_amt NUMBER := 30;
v_off NUMBER := 1;
v_raw RAW(4096);
BEGIN
LOOP
DBMS_LOB.read(v_blob, v_amt, v_off, v_raw);
HTP.prn(UTL_RAW.cast_to_varchar2(v_raw));
v_off := v_off + v_amt;
v_amt := 4096;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
-- End 9i method.
-- 10g method.
-- WPG_DOCLOAD.download_file(l_blob);
END;
PROCEDURE get_gif (p_name IN images.name%TYPE) IS
BEGIN
get (p_name, 'gif');
END;
PROCEDURE get_jpeg (p_name IN images.name%TYPE) IS
BEGIN
get (p_name, 'jpeg');
END;
END;