Introduction :

Oracle Application Express applications support the ability to upload and download files stored in the database.

Implementation :

Step 1:

 Create a File browse item.

Step 2:

 Create a directory in database.

Step 3:

 Create a procedure to upload file in the server.

Create or replace PROCEDURE          “BLOB_TO_FILE” (

p_file_name IN VARCHAR2)

IS

l_out_file UTL_FILE.file_type;

l_buffer Raw(32767);

l_amount Binary_Integer := 32767;

l_pos      INTEGER           := 1;

l_blob_len INTEGER;

p_data BLOB;

file_name VARCHAR2(256);

BEGIN

FOR rec IN

(SELECT MAX(ID) ID FROM HTMLDB_APPLICATION_FILES WHERE Name = p_file_name

)

LOOP

SELECT BLOB_CONTENT,

filename

INTO p_data,

file_name

FROM HTMLDB_APPLICATION_FILES

WHERE ID = rec.ID;

l_blob_len := DBMS_LOB.getlength(p_data);

l_out_file := UTL_FILE.fopen(‘PS_TEMP_DIR’, file_name, ‘wb’, 32767);

WHILE l_pos < l_blob_len

LOOP

DBMS_LOB.Read(p_data, l_amount, l_pos, l_buffer);

IF l_buffer IS NOT NULL THEN

UTL_FILE.put_raw(l_out_file, l_buffer, True);

END IF;

l_pos := l_pos + l_amount;

END LOOP;

UTL_FILE.fclose(l_out_file);

————–

END LOOP;

EXCEPTION

WHEN OTHERS THEN

IF UTL_FILE.is_open(l_out_file) THEN

UTL_FILE.fclose(l_out_file);

END IF;

END;

 

Step 4:

 

Create a button in page for submitting the page.

 

Step 5:

 

Create a page process to call the upload file procedure.

 

DECLARE

P_FILE_NAME    VARCHAR2(200);

lv_v_file_name VARCHAR2(100);

BEGIN

P_FILE_NAME           := NULL;

IF :P13_ESTIMATE_FILE IS NOT NULL THEN

BEGIN

SELECT FILENAME

INTO lv_v_file_name

FROM HTMLDB_APPLICATION_FILES

WHERE NAME=:P13_ESTIMATE_FILE;

EXCEPTION

WHEN no_data_found THEN

lv_v_file_name := NULL;

END;

BEGIN

SELECT ‘VMS_’

||:P13_REQUEST_ID

||’_’

||lv_v_file_name

INTO lv_v_file_name

FROM dual;

EXCEPTION

WHEN no_data_found THEN

lv_v_file_name := NULL;

END;

BLOB_TO_FILE( in_file_name => :P13_ESTIMATE_FILE);

–rollback;

BEGIN

UPDATE AP_SY_VM_TB_REQ_HDR vrh

SET ESTIMATE_FILE_NAME=:P13_ESTIMATE_FILE

WHERE REQUEST_ID      =:P13_REQUEST_ID;

EXCEPTION

WHEN OTHERS THEN

raise_application_error(-20158,’Error in updating File ‘|| SQLERRM);

END;

END IF;

END;

 

Step 5:

Create a button to download the existing file in the server.

 

Step 6:

 Create a procedure to download file.

Create or replace PROCEDURE          “DOWNLOAD_MY_FILE” (

iv_n_observation_id IN NUMBER,

iv_n_file           IN NUMBER)

AS

v_length    NUMBER;

v_file_name VARCHAR2(2000);

Lob_loc Bfile;

BEGIN

BEGIN

SELECT attachment_filename

INTO v_file_name

FROM orw_tb_report_atchmts F

WHERE attachment_id   = iv_n_file

AND observation_id  = iv_n_observation_id;

EXCEPTION

WHEN no_data_found THEN

v_file_name := NULL;

END;

IF v_file_name IS NOT NULL THEN

Lob_loc      := bfilename(‘PS_TEMP_DIR’, v_file_name);

–raise_application_error(-20001, ‘Lob_loc—>’||Lob_loc);

v_length     := dbms_lob.getlength(Lob_loc);

—  raise_application_error(-20001, ‘v_length—>’||v_length);

owa_util.mime_header(‘application/octet’, False);

 

htp.p(‘Content-length: ‘ || v_length);

htp.p(‘Content-Disposition: attachment; filename=”‘ || SUBSTR(v_file_name, INSTR(v_file_name, ‘/’) + 1) || ‘”‘);

owa_util.http_header_close;

wpg_docload.download_file(Lob_loc);

apex_application.stop_apex_engine;

END IF;

exception

when others then

raise_application_error(-20002, SQLCODE||’ — ‘||SQLERRM);

apex_application.stop_apex_engine;

END download_my_file;

 

Step 7:

 

Create a page process to call the procedure using the download button.

 

BEGIN

AP_SY_pr_download_file( iv_n_request_id => :P13_REQUEST_ID,

iv_v_file_typ   => ‘EST’);

–rollback;

END;

Conclusion: 

 This Package will help us to Upload and Download the Files from Server.

Recommended Posts

Start typing and press Enter to search