I need to send some documents to my server from my Oracle application, for this reason I created an API on my server using php
The API tested by PostMan and I can upload any file type.
Now I need to integrate it with my Oracle App, but I never write Oracle code ever. I used ChatGPT and check some resources on google to integrate it with following code:
CREATE OR REPLACE PROCEDURE read_pdf_file(p_file_name IN VARCHAR2, p_blob OUT BLOB) AS l_bfile BFILE; BEGIN l_bfile := BFILENAME('PDF_DIR', p_file_name); DBMS_LOB.OPEN(l_bfile, DBMS_LOB.LOB_READONLY); DBMS_LOB.CREATETEMPORARY(p_blob, TRUE); DBMS_LOB.LOADFROMFILE(p_blob, l_bfile, DBMS_LOB.GETLENGTH(l_bfile)); DBMS_LOB.CLOSE(l_bfile); END read_pdf_file; /*************************************************** CREATE OR REPLACE PROCEDURE send_FILE_to_api(p_url IN VARCHAR2, p_file_name IN VARCHAR2) IS l_blob BLOB; l_base64 CLOB; l_http_req UTL_HTTP.req; l_http_resp UTL_HTTP.resp; l_resp_text VARCHAR2(32767); l_boundary VARCHAR2(64) := '----WebKitFormBoundary7MA4YWxkTrZu0gW'; l_crlf VARCHAR2(2) := CHR(13) || CHR(10); l_body CLOB; l_buffer VARCHAR2(32767); l_clob CLOB ; l_offset INTEGER := 1; l_chunk_size CONSTANT INTEGER := 32767; l_chunk VARCHAR2(32767); l_clob_len INTEGER; l_read_len INTEGER ; l_fix_inc INTEGER := 4000 ; amount BINARY_INTEGER := 32760; l_buffersize number := 32767; l_vc varchar2(32767); BEGIN -- Read the PDF file into a BLOB read_pdf_file(p_file_name, l_blob); l_clob := clobfromblob(l_blob) ; -- Construct the HTTP request body DBMS_LOB.CREATETEMPORARY(l_body, TRUE); DBMS_LOB.WRITEAPPEND(l_body, LENGTH('--' || l_boundary || l_crlf), '--' || l_boundary || l_crlf); DBMS_LOB.WRITEAPPEND(l_body, LENGTH('Content-Disposition: form-data; name="file"; filename="' || p_file_name || '"' || l_crlf), 'Content-Disposition: form-data; name="file"; filename="' || p_file_name || '"' || l_crlf); DBMS_LOB.WRITEAPPEND(l_body, LENGTH('Content-Type: application/pdf' || l_crlf || l_crlf), 'Content-Type: application/pdf' || l_crlf || l_crlf); DBMS_LOB.APPEND(l_body, l_clob); DBMS_LOB.WRITEAPPEND(l_body, LENGTH(l_crlf || '--' || l_boundary || '--' || l_crlf), l_crlf || '--' || l_boundary || '--' || l_crlf); -- Make the HTTP request UTL_HTTP.set_wallet('file:C:\WALLET', 'Tensor123'); UTL_HTTP.set_transfer_timeout(60); l_http_req := UTL_HTTP.begin_request(p_url, 'POST', 'HTTP/1.1'); UTL_HTTP.set_header(l_http_req, 'Content-Type', 'multipart/form-data; boundary=' || l_boundary); UTL_HTTP.set_header(l_http_req, 'Content-Length', DBMS_LOB.GETLENGTH(l_body)); l_clob_len := DBMS_LOB.GETLENGTH(l_body); while (l_offset <= l_clob_len) loop l_vc := dbms_lob.substr(l_body, l_buffersize, l_offset); UTL_HTTP.write_text(l_http_req, SUBSTR(l_vc, l_offset, l_buffersize)); l_offset := l_offset + l_buffersize; end loop; l_http_resp := UTL_HTTP.get_response(l_http_req); -- Read the response BEGIN LOOP UTL_HTTP.read_text(l_http_resp, l_resp_text); DBMS_OUTPUT.put_line(l_resp_text); END LOOP; EXCEPTION WHEN UTL_HTTP.end_of_body THEN NULL; END; UTL_HTTP.end_response(l_http_resp); END send_FILE_to_api ;
Using above code I can upload text files but when I try to upload pdf file I did not get any respond
I need some help to improve the code and upload pdf, jpg file using REST API from my Oracle app