Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#14

AW: Image in Blob field (Web-Application)

  Alt 28. Nov 2020, 09:52
IM VARCHAR (data:image/png;base64,iVBORw0KGgoAAAANSU...) kann ich die Daten lesen und im LONGTEXT (뎵܎½辵뾹؞��ܞ¶) sind die Zeichen anders.
Base64 ist ASCII, LongText scheint aber UFT8 zu enthalten.

Mir scheint das Speichern als Text, egal ob als VarChar oder als LongText irgendwie äußerst ungeeignet. Mit PDFs wird das dann sicherlich erst recht scheitern.

Das Folgende ist nur arg geraten, da gerade keine Testmöglichkeit gegeben ist:
Delphi-Quellcode:
function TDataModule_Client.Save_NewLogo(Logo_string: string): boolean;
var
  BF : TBlobField;
  TS : TStringStream;
begin
   try
     if DataSet_NewLogo.State = dsBrowse then DataModule_Client.DataSet_NewLogo.Insert;
     DataSet_NewLogo.FieldByName('company_id').AsInteger := DataSet_NewCompany.FieldByName('company_id').AsInteger;
     if Logo_string <> 'then begin
       TS := TStringStream.Create(Logo_string);
       TS.Position := 0;
       BF := DataSet_NewLogo.FieldByName('logo') as TBlobField;
       BF.LoadFromStream(TS);
       TS.Free;
     end;
     DataSet_NewLogo.Post;
     DataSet_NewLogo.ApplyUpdates;
     Result := true;
  except
     on : Exception do begin
       // Im Produktivbetrieb hier Fehler loggen.
       ShowMessage(e.Exception);
       Result := false;
     end;
  end;
end;
Wären eventuell der Typ VARBINARY(Maxmimalgröße in Byte) oder LongBlob nutzbare Alternativen?

Meine Befürchtung:

Die Speicherung als Strings, Text, VarChar, ... wird scheitern, da hier immer auf die Zeichensätze zu achten sein wird, $00 sicherlich immer Strings "zerstören" wird, spätestens bei PDF-Dateien ein gerantiertes Ko-Kriterium.
  Mit Zitat antworten Zitat