Fehlerbehebung nach OCI Bucket einrichtung bei list_objects und entsprechende doku

This commit is contained in:
2026-04-10 12:13:05 +02:00
parent 6c8b5053e2
commit 7921b1ae0d
3 changed files with 57 additions and 50 deletions

View File

@@ -2,11 +2,6 @@ create or replace package body pck_net_storage as
c_log_module constant lg_app_log.log_module%type := 'NETZLAUFWERK';
type t_object_path is record (
path varchar2(1024)
,filename varchar2(256)
);
-- ==================== Private Helpers ====================
function f_build_url (
@@ -47,40 +42,6 @@ create or replace package body pck_net_storage as
end if;
end f_build_url;
function f_split_object_key (i_object_key in varchar2) return t_object_path
/*Kopf------------------------------------------------------------------------------------------------
-- Beschreibung: Extrahiert Pfad und Dateiname aus einem OCI-Objektschlüssel.
-- Bei Ordner-Keys (trailing Slash) wird der Ordnername als Dateiname zurückgegeben.
------------------------------------------------------------------------------------------------------
-- Parameter: i_object_key Vollständiger Objektschlüssel (z.B. mandant/Eingang/Import/datei.pdf)
------------------------------------------------------------------------------------------------------
-- Rückgabe: t_object_path Record mit path (inkl. trailing Slash) und filename
------------------------------------------------------------------------------------------------------
-- MA Datum Änderung
-- SCK 2026-04-09 Funktion erstellt
------------------------------------------------------------------------------------------------Kopf*/
is
l_key varchar2(1024);
l_pos number;
l_result t_object_path;
begin
-- Trailing Slash entfernen damit Ordner-Keys genauso behandelt werden wie Datei-Keys
l_key := rtrim(i_object_key, '/');
l_pos := instr(l_key, '/', -1);
if l_pos > 0
then
l_result.path := substr(l_key, 1, l_pos);
l_result.filename := substr(l_key, l_pos + 1);
else
l_result.path := null;
l_result.filename := l_key;
end if;
return l_result;
end f_split_object_key;
procedure p_assert_allowed (i_object_key in varchar2)
/*Kopf------------------------------------------------------------------------------------------------
-- Beschreibung: Prüft den Objektschlüssel auf Path-Traversal-Angriffe und Tenant-Scope.
@@ -152,6 +113,7 @@ create or replace package body pck_net_storage as
,p_body => coalesce(i_body_clob, empty_clob())
,p_body_blob => coalesce(i_body_blob, empty_blob())
,p_credential_static_id => pck_system.f_get_par_wert_by_programmid('NETSTORE_CRED_ID')
,p_wallet_path => pck_system.f_get_par_wert_by_programmid('NETSTORE_WALLET_PATH')
);
l_status := apex_web_service.g_status_code;
@@ -209,9 +171,9 @@ create or replace package body pck_net_storage as
while not l_done
loop
l_url := f_build_url()
|| '?prefix=' || utl_url.escape(i_prefix, false)
|| '&delimiter=' || utl_url.escape(i_delimiter, false)
|| '&limit=' || c_page_size;
|| '?limit=' || c_page_size
|| (case when i_prefix is not null then '&prefix=' || utl_url.escape(i_prefix, false) else '' end)
|| (case when i_delimiter is not null then '&delimiter=' || utl_url.escape(i_delimiter, false) else '' end);
if l_cur_start is not null
then
@@ -300,9 +262,43 @@ create or replace package body pck_net_storage as
-- ==================== Öffentliche Funktionen ====================
function f_split_object_key (i_object_key in varchar2) return t_object_path
/*Kopf------------------------------------------------------------------------------------------------
-- Beschreibung: Extrahiert Pfad und Dateiname aus einem OCI-Objektschlüssel.
-- Bei Ordner-Keys (trailing Slash) wird der Ordnername als Dateiname zurückgegeben.
------------------------------------------------------------------------------------------------------
-- Parameter: i_object_key Vollständiger Objektschlüssel (z.B. mandant/Eingang/Import/datei.pdf)
------------------------------------------------------------------------------------------------------
-- Rückgabe: t_object_path Record mit path (inkl. trailing Slash) und filename
------------------------------------------------------------------------------------------------------
-- MA Datum Änderung
-- SCK 2026-04-09 Funktion erstellt
------------------------------------------------------------------------------------------------Kopf*/
is
l_key varchar2(1024);
l_pos number;
l_result t_object_path;
begin
-- Trailing Slash entfernen damit Ordner-Keys genauso behandelt werden wie Datei-Keys
l_key := rtrim(i_object_key, '/');
l_pos := instr(l_key, '/', -1);
if l_pos > 0
then
l_result.path := substr(l_key, 1, l_pos);
l_result.filename := substr(l_key, l_pos + 1);
else
l_result.path := null;
l_result.filename := l_key;
end if;
return l_result;
end f_split_object_key;
function f_list_objects (
i_prefix in varchar2
,i_delimiter in varchar2 default '/'
,i_delimiter in varchar2 default null
,i_start_with in varchar2 default null
,i_limit in number default 0
) return t_net_storage_tab
@@ -310,7 +306,7 @@ create or replace package body pck_net_storage as
-- Beschreibung: Listet Objekte und Unterordner im Bucket mit Rechteprüfung und Scope-Validierung.
------------------------------------------------------------------------------------------------------
-- Parameter: i_prefix Präfix / Pfad im Bucket (z.B. eingang/)
-- i_delimiter Trennzeichen für Hierarchie-Simulation (Standard: /)
-- i_delimiter Trennzeichen für Hierarchie-Simulation (Standard: null = alle Dateien inkl. Unterordner anzeigen. Nutze '/' um nur die Dateien im Ordner i_prefix zu sehen)
-- i_start_with Optionaler Startpunkt für Paginierung
-- i_limit Maximale Anzahl Ergebnisse (0 = unbegrenzt)
------------------------------------------------------------------------------------------------------

View File

@@ -1,5 +1,11 @@
create or replace package pck_net_storage as
-- Object Key aufgeteilt in Pfad (ohne Dateiname) und Dateiname (ohne Ordner Pfad)
type t_object_path is record (
path varchar2(4000)
,filename varchar2(256)
);
-- Metadaten eines einzelnen OCI-Objekts (HEAD-Anfrage)
type t_object_meta is record (
object_name varchar2(1024)
@@ -9,9 +15,13 @@ create or replace package pck_net_storage as
,etag varchar2(256)
);
function f_split_object_key (
i_object_key in varchar2
) return t_object_path;
function f_list_objects (
i_prefix in varchar2
,i_delimiter in varchar2 default '/'
,i_delimiter in varchar2 default null
,i_start_with in varchar2 default null
,i_limit in number default 0
) return t_net_storage_tab;