PDF mit Base64Encoder versenden
Re: PDF mit Base64Encoder versenden
Obwohl bei meinen Modul NetworkTCP für das Netzwerk und der CPU die Parameter Ressourcen schonend eingestellt ist, übertrage ich 1 Megabyte unter 10 Sekunden im lokalen Netzwerk.
Die Grundeinstellung sind für die Nutzdaten 4096 Byte pro Block und eine Delay Blockzeit von 20 ms.
Da muss bei deinen Test ein Fehler passiert sein.
Die Grundeinstellung sind für die Nutzdaten 4096 Byte pro Block und eine Delay Blockzeit von 20 ms.
Da muss bei deinen Test ein Fehler passiert sein.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: PDF mit Base64Encoder versenden
Ich denke auch, dass da dann ein Fehler im Code war. Denn 2,5 MB sind ja im Grunde nichts. Im lokalen Netzwerk mit 1 GBit/s sind 2,5MB in aufgerundet 20 ms versendet.
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: PDF mit Base64Encoder versenden
Hm, ich weiss zwar nicht, wie sich da ein Fehler einschleichen soll, wenn ich doch genau den Code benutze und nichts verändert habe, aber schon klar, natürlich ist immer der Anwender Schuld.
Hilft mir übrigens bei meiner Ursprungsfrage nicht wirklich weiter.
Hilft mir übrigens bei meiner Ursprungsfrage nicht wirklich weiter.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: PDF mit Base64Encoder versenden
Uns hilft es auch nicht weiter, wenn du glaubst im Recht zu sein und uns nicht den Code zeigst, der nicht funktioniert. Dir sollte klar sein, dass 2,5 MB im Bruchteil einer Sekunde übertragen werden sollte. Und mit simplen Netzwerkbefehlen ist das auch so. Das mache ich öfter so und erreiche viele Megabytes pro Sekunde.
Also zeig doch mal, was du bisher gemacht hast, damit wir das auch nachvollziehen können. Sich blind gegenseitig die Schuld in die Schuhe zu schieben, hilft keinem weiter.
Ist das Base64-Problem mit meiner Antwort nun eigentlich gelöst oder geht das noch nicht?
Also zeig doch mal, was du bisher gemacht hast, damit wir das auch nachvollziehen können. Sich blind gegenseitig die Schuld in die Schuhe zu schieben, hilft keinem weiter.
Ist das Base64-Problem mit meiner Antwort nun eigentlich gelöst oder geht das noch nicht?
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: PDF mit Base64Encoder versenden
Beim TCP benutze ich diesen Code: viewtopic.php?f=8&t=31321
Ohne Veränderung. Deshalb weiss ich nicht, wo ICH da einen Fehler machen soll.
Tja, ich verzweifle manchmal in diesem Forum, da ich nicht verstehe was ihr nun von mir wollt.
Den Code habe ich bereits ganz am Anfang gepostet. Und dieser funktioniert halt nicht.
Ich weiss nicht, wie ich den empfangegen Datenstring dann wieder in eine PDF umwandeln kann.
Der Client arbeitet mit WEBSOCKETS, deshalb benötige ich - zumindest ist das mein Wissenstand - Base64, um die PDF-Datei zu empfangen.
Aber ich lasse mich sehr gerne mit einem leicht verständlichen BEISPIEL eines Besseren belehren.
Ohne Veränderung. Deshalb weiss ich nicht, wo ICH da einen Fehler machen soll.
Tja, ich verzweifle manchmal in diesem Forum, da ich nicht verstehe was ihr nun von mir wollt.
Den Code habe ich bereits ganz am Anfang gepostet. Und dieser funktioniert halt nicht.
Ich weiss nicht, wie ich den empfangegen Datenstring dann wieder in eine PDF umwandeln kann.
Der Client arbeitet mit WEBSOCKETS, deshalb benötige ich - zumindest ist das mein Wissenstand - Base64, um die PDF-Datei zu empfangen.
Aber ich lasse mich sehr gerne mit einem leicht verständlichen BEISPIEL eines Besseren belehren.
Zuletzt geändert von stevie1401 am 10.07.2019 08:41, insgesamt 1-mal geändert.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: PDF mit Base64Encoder versenden
Hier mal Code der eine Datei in Base64 umwandelt.
Code:
Code:
Code: Alles auswählen
EnableExplicit
;FileBase64
;Author: Mijikai
Global base64.i
Procedure.i FileBase64(File.s)
Protected handle.i
Protected *src
Protected *con.Integer
Protected src_siz.i
Protected con_siz.i
If File
handle = ReadFile(#PB_Any,File)
If IsFile(handle)
src_siz = Lof(handle)
*src = AllocateMemory(src_siz)
If *src
If ReadData(handle,*src,src_siz) = src_siz
con_siz = (src_siz << 1) + SizeOf(Integer)
*con = AllocateMemory(con_siz)
If *con
*con\i = Base64EncoderBuffer(*src,src_siz,*con + SizeOf(Integer),con_siz)
If Not *con\i
FreeMemory(*con)
*con = #Null
EndIf
EndIf
EndIf
FreeMemory(*src)
EndIf
CloseFile(handle)
EndIf
EndIf
ProcedureReturn *con
EndProcedure
Procedure.i FileBase64Size(*base64.Integer)
If *base64
ProcedureReturn *base64\i
EndIf
ProcedureReturn #Null
EndProcedure
Procedure.i FileBase64Buffer(*base64)
If *base64
ProcedureReturn *base64 + SizeOf(Integer)
EndIf
ProcedureReturn #Null
EndProcedure
Procedure.i FileBase64Free(*base64)
If *base64
FreeMemory(*base64)
EndIf
ProcedureReturn #Null
EndProcedure
base64 = FileBase64("TestFile.bin")
ShowMemoryViewer(FileBase64Buffer(base64),FileBase64Size(base64))
End
Re: PDF mit Base64Encoder versenden
@Stevie: was du machen willst ist ein PDF Download und Ansicht im Browser, oder?
Wenn du das mit WebSocket machst, ist das unnötig kompliziert.
Clientseitig (SpiderBasic) kannst du eine Datei Downloaden mittels JavaScript window.open()
Für den Server würde ich dir von PB abraten. Nimm lieber ein Freeware Apache Projekt oder Nginx.
Die sind viel schneller und robuster..
Ciao Dige
Wenn du das mit WebSocket machst, ist das unnötig kompliziert.
Clientseitig (SpiderBasic) kannst du eine Datei Downloaden mittels JavaScript window.open()
Code: Alles auswählen
; SpiderBasic
Procedure Download(Filename.s, Parameter.s = "")
! if (v_parameter != "") {
! var win = window.open(v_filename, v_parameter);
! win.focus();
! } else {
! window.open(v_filename);
! }
EndProcedure
Download ("https://buildmedia.readthedocs.org/media/pdf/django-leaflet/latest/django-leaflet.pdf")
Die sind viel schneller und robuster..
Ciao Dige
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: PDF mit Base64Encoder versenden
Vielen Dank für eure Hilfe!
Leider wird aus vielerlei Gründen mein Knowhow nicht über Spider- und Purebasic hinaus gehen können, deshalb suche ich halt nach Lösungen auf dieser Ebene, wohl wissend, dass ich da keine "Wunder" erwarten kann.
Leider wird aus vielerlei Gründen mein Knowhow nicht über Spider- und Purebasic hinaus gehen können, deshalb suche ich halt nach Lösungen auf dieser Ebene, wohl wissend, dass ich da keine "Wunder" erwarten kann.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- TroaX
- Beiträge: 661
- Registriert: 08.03.2013 14:27
- Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
- Wohnort: NRW
- Kontaktdaten:
Re: PDF mit Base64Encoder versenden
Naja Spiderbasic setzt in der Regel sowieso einen Web-Server vorraus. Spiderbasic ist ja dazu da, RIA's (Rich Internet Applications) zu realisieren. Ein Webserver sollte also in der Regel sowieso da sein. Wenn du hingegen zum Beispiel eine lokale Desktop-Anwendung realisieren möchtest und über das PBEx Webgadget anzeigen willst, solltest du einen Webserver in die Anwendung integrieren. Und das aus folgenden Gründen:
1. Viele Javascript Netzwerk-Geschichten erfordern die Einhaltung der Origin-Richtlinien. Javascript setzt daher vorraus, das eine IP/Domain die Anwendung ausliefert.
2. Der Websocket ist nicht dazu gedacht, Dateien zu übertragen. Denn Javascript kann über den Browser nur eingeschränkt auf das Dateisystem zugreifen, wodurch du Probleme beim Speichern der Datei bekommen wirst.
3. Kann ein Webserver die Dateien super einfach ausliefern, weil genau das seine Hauptaufgabe ist.
Wenn du also eine Purebasic-Anwendung als Server verwenden willst, ist das erst einmal kein Problem. Du kannst ja trotzdem über Socket mit dem Client arbeiten. Aber das Übertragen von Dateien sollte man einem Webserver überlassen, da der Browser die Dateien so verarbeitet, wie er es verarbeiten soll.
Wenn die Anwendung im Intranet laufen soll (nicht über das Internet erreichbar), dann reicht ein einfacher Webserver problemlos aus. Suche hier nach nanoHTTP. Das ist mein Webserver zum einbinden in die eigene Purebasic-Anwendung. Im Internet empfehle ich hingegen einen etablierten Webserver, den du entweder als Reverse-Proxy vor nanoHTTP setzt (wegen Verschlüsselung etc.) oder nanoHTTP weglässt und ihn die Daten ausliefern lässt.
1. Viele Javascript Netzwerk-Geschichten erfordern die Einhaltung der Origin-Richtlinien. Javascript setzt daher vorraus, das eine IP/Domain die Anwendung ausliefert.
2. Der Websocket ist nicht dazu gedacht, Dateien zu übertragen. Denn Javascript kann über den Browser nur eingeschränkt auf das Dateisystem zugreifen, wodurch du Probleme beim Speichern der Datei bekommen wirst.
3. Kann ein Webserver die Dateien super einfach ausliefern, weil genau das seine Hauptaufgabe ist.
Wenn du also eine Purebasic-Anwendung als Server verwenden willst, ist das erst einmal kein Problem. Du kannst ja trotzdem über Socket mit dem Client arbeiten. Aber das Übertragen von Dateien sollte man einem Webserver überlassen, da der Browser die Dateien so verarbeitet, wie er es verarbeiten soll.
Wenn die Anwendung im Intranet laufen soll (nicht über das Internet erreichbar), dann reicht ein einfacher Webserver problemlos aus. Suche hier nach nanoHTTP. Das ist mein Webserver zum einbinden in die eigene Purebasic-Anwendung. Im Internet empfehle ich hingegen einen etablierten Webserver, den du entweder als Reverse-Proxy vor nanoHTTP setzt (wegen Verschlüsselung etc.) oder nanoHTTP weglässt und ihn die Daten ausliefern lässt.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript