Nothing here yet.
Nothing here yet.
No blogs yet.
I did research too but the only way I could find was to create a process and remove _apex_session before saving it to the database. declare l_apex_session varchar2( 80 ); begin l_apex_session : = '?_apex_session=' || :APP_ID || ',' || :APP_SESSION ; :P2_CONTENT : = replace( :P2_CONTENT , l_apex_session, '' ); end ;
Thank you very much, Louis. I followed your instruction and add some changes. In ORDS POST hander, return Object Storage URL instead of ORDS GET URL. Get pre authenticated request URL just after APEX session is authenticated and store it in Application Item. (by Application Computation) declare l_response dbms_cloud_oci_obs_object_storage_create_preauthenticated_request_response_t; l_result dbms_cloud_oci_object_storage_preauthenticated_request_t; l_details dbms_cloud_oci_object_storage_create_preauthenticated_request_details_t; l_url varchar2( 4000 ); preauth_request_error exception; begin l_details : = dbms_cloud_oci_object_storage_create_preauthenticated_request_details_t; l_details. name : = 'standard-' | | sys_guid(); l_details.bucket_listing_action : = 'Deny' ; l_details.object_name : = null; l_details.access_type : = 'AnyObjectRead' ; l_details.time_expires : = systimestamp + interval '1' day; l_response : = dbms_cloud_oci_obs_object_storage.create_preauthenticated_request ( namespace_name = > :G_NAMESPACE , bucket_name = > :G_BUCKET , create_preauthenticated_request_details = > l_details , region = > :G_REGION , credential_name = > :G_CREDENTIAL ); if l_response.status_code ! = 200 then raise preauth_request_error; end if ; l_result : = l_response.response_body; l_url : = 'https://objectstorage.' | | :G_REGION | | '.oraclecloud.com' | | l_result.access_uri; return l_url; end; Replace the image URL to Pre authenticated URL within editingDowncat. if ( data.attributeNewValue ) { if ( data.attributeNewValue.startsWith( "&G_OBJECT_STORAGE_URL." )) { data.attributeNewValue = data.attributeNewValue.replace( "&G_OBJECT_STORAGE_URL." , "&G_PREAUTH_URL." ); } } I hope you find it interesting.
Thank you Louis, your article inspires me a lot. Because I tried to implement the image upload before this wrap-up, I took some different implementation. Let me share. Firstly the content of CKEditor stores in APEX Collection then copied to the table after Automatic-DML process by the code below. Text is stored in CKE_DOCUMENTS.CONTENT and CKE_IMAGES.DOCUMENT_ID is referring CKE_DOCUMENTS.ID. declare l_clob clob; l_link varchar2( 32767 ); l_id varchar2( 80 ); i pls_integer; l_images apex_t_varchar2; begin select clob001 into l_clob from apex_collections where collection_name = :P2_COLLECTION and seq_id = 1 ; update cke_documents set content = l_clob where id = :P2_ID; - - find all image url from the content. i : = 1 ; while true loop - - retrieve the image url with the id l_link : = regexp_substr(l_clob, :G_IMAGE_URL | | '/([0-9]+)' , 1 ,i); if l_link is null then exit; else i : = i + 1 ; - - get image id from the url and remember it. l_id : = regexp_replace(l_link, :G_IMAGE_URL | | '/([0-9]+)' , '\1' ); apex_string. push (l_images,l_id); end if ; end loop; - - initialize the images linked to the document, no effect on new doc. update cke_images set document_id = null where document_id = :P2_ID; - - link image to the document. update cke_images set document_id = :P2_ID where id in (select column_value from table(l_images)); end; Since cascade delete is enabled, any images linked to the document will be deleted along with the document. Images may remain, but housekeeping is simple (just delete the image without document_id).