Upload auf Server ohne FTP

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Upload auf Server ohne FTP

Beitrag von Delle »

Hallo,

besteht eine Möglichkeit einen typischen Browser-File-Upload zu simulieren?

Sprich man wählt mit PB eine lokale Datei aus, die dann auf den
Server übertragen werden soll. Auf dem Server wartet das
gleiche PHP-Script, was normalerweise auch für File-Uploads
benutzt wird (und eben $_FILES['datei'] ausliest).

Also alles OHNE FTP!

Code: Alles auswählen

InitNetwork() 

ConnectionID = OpenNetworkConnection("www.domain.de", 80)

buf$=buf$+"POST /upload.php HTTP/1.0"+Chr(13)+Chr(10)
buf$=buf$+"Host: www.domain.de"+Chr(13)+Chr(10)
buf$=buf$+"Content-type: multipart/form-data"+Chr(13)+Chr(10)
buf$=buf$+"Content-length: 12345"+Chr(13)+Chr(10)
buf$=buf$+"datei: 12345"+Chr(13)+Chr(10)
buf$=buf$+Chr(13)+Chr(10)+Chr(13)+Chr(10)

SendNetworkData(ConnectionID, buf$, Len(buf$))

CloseNetworkConnection(ConnectionID)
Was ist daran falsch? Dateiauswahl etc. hab ich jetzt mal weggelassen...

Oder sollte man vielleicht die Datei einfach komplett binär
an ein normales PHP-Script senden was lediglich diese
Datei in eine Variable abspeichert und fertig?
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

ich kann mich natürlich irren aber müsste hier:
buf$=buf$+Chr(13)+Chr(10)+Chr(13)+Chr(10)
nicht nur ein Chr(13)+Chr(10) sein? Du hast ja schon in der
Zeile darüber ein CrLF. Das müssen aber nur 2 statt 3 am
Ende sein.

Übrigens kennt PB eine Konstante namens #CRLF$, die auch
Chr(13)+Chr(10) enthält.
Bild
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Du rufst doch eine PHP-Datei auf. AFAIK werden die doch nur vom Server ausgeführt, wenn man sie per UrlDownloadToFile_() "runterladet".

Ich kann mcih aber auch irren. Aber so kenne ich das.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Du irrst dich /:->. UrlDownloadToFile_() schickt im Grunde das
Selbe wie der Code von Delle.
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Content-length: 12345 Stimmt auf jeden fall schon nicht.

Probiers mal so:

Code: Alles auswählen

InitNetwork()

ConnectionID = OpenNetworkConnection("www.domain.de", 80)

Content.s = "datei: 12345"
buf$=buf$+"POST /upload.php HTTP/1.0"+Chr(13)+Chr(10)
buf$=buf$+"Host: www.domain.de"+Chr(13)+Chr(10)
buf$=buf$+"Content-type: multipart/form-data"+Chr(13)+Chr(10)
buf$=buf$+"Content-length: "+Str(Len(Content))+Chr(13)+Chr(10)
buf$=buf$+Content+Chr(13)+Chr(10)
buf$=buf$+Chr(13)+Chr(10)

SendNetworkData(ConnectionID, buf$, Len(buf$))

CloseNetworkConnection(ConnectionID)
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
saimen
Beiträge: 172
Registriert: 26.01.2005 10:44
Wohnort: Passau
Kontaktdaten:

Beitrag von saimen »

Wo steht da jetzt die File die ich uploaden will? z.b. c:\test.txt?

bei mir funktioniert das leider nicht.
Die File soll in meinem fall an eine cgi geschickt werden die dann den Upload ausführt.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Ich rate jetzt einfach mal und sage, die mußt Du selbst einlesen (in einen Buffer) und diese dann in die Variable Content.s speichern. Allerdings weiß ich nicht, ob dazu eine besondere Kodierung benötigt wird (im Falle von Binärdaten).
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Antworten