Entwickler-Ecke
Dateizugriff - Stream zu Hexadezimal
LittleBen - So 18.09.11 02:07
Titel: Stream zu Hexadezimal
Hallo,
ich habe ein Memory-Stream, der als Argument in einer URL dienen soll. Das heißt:
http://www.test.de/verarbeiten.php?einstream=derstream.
Da kam ich auf die Idee, den Stream einfach in eine hexadezimale (oder binäre?) Zahl zu wandeln und diese dann als Argument zu benutzen (später dann wieder umwandeln). Nun stellen sich die Fragen, ob das funktioniert und wenn ja, wie? Oder ob es eine andere Methode gibt, einen Stream als Argument für eine PHP-Seite zu verwenden.
Hoffe, dass Ihr viele Ideen habt!
Vielen Dank und Grüße,
Benny
jaenicke - So 18.09.11 04:33
Du solltest das mit TIdMultiPartFormDataStream oder so ähnlich und TIdHttp.Post machen können.
Das als GET-Parameter in die URL zu schreiben ist keine gute Idee.
LittleBen - So 18.09.11 11:41
Das Problem ist, dass die Übertragung nicht im Programm statt finden soll, sondern der Link soll bereit gestellt werde.
jaenicke - So 18.09.11 11:54
Dann würde ich das ganze einfach mit base64 codieren.
LittleBen - So 18.09.11 12:01
Habe mehrere Base64 Klassen im Netzt gefunden, doch in keiner kann ich einen ganzen Stream codieren. Wie funktioniert das dann?
jaenicke - So 18.09.11 12:04
Lies den Stream vorher einfach in einen AnsiString ein. ;-)
LittleBen - So 18.09.11 12:11
Gerade habe ich die Unit SZCodeBaseX gefunden (
http://www.koders.com/delphi/fid637483B9CD9198E8EFBB2E7E5BF9AF39E5789046.aspx?s=ftp). Dort gibt es die Funktionen
Delphi-Quelltext
1: 2:
| function SZEncodeBaseXStream(sIN, sOUT: TStream; Size: integer; const Codes: String; BITS: integer; FullQuantum : integer; MIMELine: integer ): integer; function SZDecodeBaseXStream(sIN, sOUT: TStream; const Codes: String; BITS: integer): integer; |
. Nur dort verstehe ich nicht, wie ich sie verwenden soll. Kannst du mir die beiden Funktionen vom groben Aufbau erklären (wofür sIN,Codes,...?).
jaenicke hat folgendes geschrieben : |
Lies den Stream vorher einfach in einen AnsiString ein. ;-) |
Eine URL darf ja im IE nur ca. 2500 Zeichen beinhalten, deshalb ist das eher keine gute Idee.
jaenicke - So 18.09.11 12:24
LittleBen hat folgendes geschrieben : |
jaenicke hat folgendes geschrieben : | Lies den Stream vorher einfach in einen AnsiString ein. ;-) | Eine URL darf ja im IE nur ca. 2500 Zeichen beinhalten, deshalb ist das eher keine gute Idee. |
Und der Unterschied gegenüber es nicht zu tun liegt wo? :gruebel:
Die Zeichenanzahl ist doch so oder so gleich.
Im IE habe ich gelesen 2083 Zeichen und andere, bei denen auch mehr ging.
Aber wer soll denn bitte URLs mit derart vielen Zeichen überhaupt benutzen? :shock: Bei mir werden die vom Router aus Sicherheitsgründen direkt geblockt.
LittleBen hat folgendes geschrieben : |
Nur dort verstehe ich nicht, wie ich sie verwenden soll. Kannst du mir die beiden Funktionen vom groben Aufbau erklären (wofür sIN,Codes,...?). |
Naja, sIN und sOUT sind doch klar, in sIN ist der Stream mit deinen Daten und in SOUT landet das Ergebnis. Codes und Bits sind nach einem kurzen Blick offenbar SZCodes64URL und SZBITS64. Da ich die Unit nicht kenne, kann ich aber auch nur in den Quelltext schauen. ;-)
LittleBen - So 18.09.11 12:34
jaenicke hat folgendes geschrieben : |
Aber wer soll denn bitte URLs mit derart vielen Zeichen überhaupt benutzen? :shock: Bei mir werden die vom Router aus Sicherheitsgründen direkt geblockt. |
Stimmt...doch den AnsiString kann ich ja auch nicht direkt in die URL eintragen, da manche Zeichen ja nicht erlaubt sind. Also erst noch in Hexadezimal umwandeln?
jfheins - So 18.09.11 13:25
Du sollst den String ERST in einen Ansistring reinschreieben (ja, dann enthält er ungültige Zeichen) und danach dann base64 kodieren. Danach enthält er keine ungültigen Zeichen mehr.
Falls deine Daten zu lang sind, um noch in die URL zu passen ist das so oder so ein Problem. (base64 schlägt nochmal 33% auf die daten drauf...) In diesem Fall solltest du die Daten lieber per POST übertragen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!