-
BLOB mit BASE64 encoden für REST Service im IBM i IWS
Hallo zusammen
Ich habe die Anforderung aus einem BLOB Feld einer AS400 Tabelle, welches ein Programmobjekt für eine Android App beinhält (ca. 5 MB), mittels REST Service über den IBM i integrated web services server, dieses als BASE64 String zur Verfügung zu stellen.
Grundsätzlich dachte ich, das mit folgendem SQL zu machen, aber das funktioniert leider nicht, da der BLOB Inhalt zu groß ist. SYSTOOLS.BASE64ENCODE ist auf 2732 Zeichen beschränkt.
Code:
Select cast(systools.base64encode(Datei) AS clob ccsid 1208) as Datei from Versionsverwaltung
where programm = 'StaplerTerminal.apk' and versionsnr = '1.0.5';
Daher war dann mein Ansatz, das BLOB Feld in einem CLOB (CCSID 1208) als BASE64 zu speichern. Dies wollte ich mittels apr_base64_encode_binary bewerkstelligen. Die Funktion habe ich aus einem Foreneintrag übernommen. Nur komme ich auf keinen grünen Zweig, da ich, egal was ich anstelle, immer falsche BASE64 Daten erzeuge.
Code:
dcl-s Blob sqltype(BLOB:16773100);
dcl-s Clob sqltype(CLOB:16773100) CCSID(1208);
dcl-s DateiClob sqltype(CLOB:16773100) CCSID(1208);
dcl-s ClobOut sqltype(CLOB:16773100) CCSID(1208);
dcl-s LocString like(Clob);
dcl-s LocBase64 like(Clob);
exec sql
select datei into :Blob,
from Versionsverwaltung
where programm = trim(:Programm) and versionsnr = trim(:Version)
limit 1;
if sqlcode = 0;
ClobOut = getBase64(Blob);
ClobOut_Len = %len(%trimr(ClobOut));
exec sql
update Versionsverwaltung set DateiClob = :ClobOut
where aktuell='1' and
where programm = trim(:Programm) and versionsnr = trim(:Version);
endif;
*inlr = *on;
return;
// _______________________________________________________________
// getBASE64 Encoded String ____________________________________
dcl-proc getBase64;
dcl-pi *n like(Clob) rtnparm; // Encoded String
PiString like(Blob);
end-pi;
dcl-s LocString like(Blob) inz; // Source String
dcl-s LocBase64 like(Clob) inz; // Encoded String
dcl-s Loclength int(10); // StringLength
dcl-s LocEnclen int(10); // EncodedLength
LocString = %trimr(PiString);
LocLength = %len(%trimr(LocString)); // String-Length
LocEnclen = encbase64bin(%addr(LocBase64): // Encode Base64
%addr(LocString):LocLength);
if LocEnclen > *zero; // Encoded Length
return %subst(LocBase64:1:LocEnclen - 1);// without last null
else;
return *blanks;
endif;
end-proc;
Hat jemand eine Idee, was ich hier falsch mache oder ist meine Herangehensweise falsch? Bin für jeden Tipp dankbar.
Grüße, Ingo
Similar Threads
-
By mk in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 19-06-19, 07:26
-
By Flappes in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 22-05-17, 11:22
-
By dschroeder in forum IBM i Hauptforum
Antworten: 14
Letzter Beitrag: 31-08-16, 15:32
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 01-10-14, 10:52
-
By infomio in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 28-03-03, 16:46
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks