Entwickler-Ecke

Internet / Netzwerk - Upload einer Datei mittels http?


Saladin - Do 18.07.02 12:06
Titel: Upload einer Datei mittels http?
Also ich will eine Datei mittels http (ähnlich Javascript) an ein Script im
Netz übergeben. Ich kann keine FTP Verbindung oder dergleichen öffnen, da nur der Http Port frei verfügbar ist.

Mit Javascript wird die Datei auf den Server geladen(Temp Verzeichnis) und dort dann vom Script entweder bearbeitet, indem es z.B. irgendwohin anders kopiert wird, oder sonstiges damit angestellt.


Hat jemand ne IDEE?

MfG
Saladin

p.s. Handelt sich nicht um einen Trojaner!!!!!!


DeCodeGuru - Do 18.07.02 13:13

Du könntest eine Script auf dem Server aufrufen und dem dann die Parameter von der Datei übergeben. Ich galube aber nicht, dass das funktioniert, weil das Script ja keinen Plattenzugriff auf der Festplatte hat, um dort eine Datei zu laden. Naja, wer weiss, obs geht. War ja nur ne Idee :mrgreen:


Saladin - Do 18.07.02 13:42
Titel: Da hast du Recht
Das wird wohl nicht klappen! Aber troztdem danke!!
:?
MfG
Saladin


Savage - Do 18.07.02 14:36

Wenn du über HTTP senden möchtest, kannst du auch eine ClientSocket - Kompo verwenden. Du musst dich halt nur mit den Clienten richtig beim WebServer einlogen (richtige Adresse und Port verwenden) bzw. einen Proxy ansteuern.

Du musst dich allerdings etwas mit der HTTP Syntax auskennen bzw. dir diesen Syntax etwas aneignen.

Im HTTP header, der immer gesendet wird, gibt es Befehle wie POST, GET,..., der dem Server darauf vorbereitet, dass du eine File senden möchtest bzw etwas haben willst.

Zur Not kannst du dir ja auch mal anschauen, was der IE oder Netscape so zum Server senden, dadurch erkennst du ersteinmal die Strucktur des Headers und kannst einige Teile davon verwenden, um deine File korrekt übers HTTP zu senden.

Viel Glück
mfg
Savage


Saladin - Do 18.07.02 16:11

Oh danke!
ganau den Hinweis habe ich gesucht.
Werde mich mal darum kümmern in den nächsten Tagen!

Also dann an die Arbeit!

MfG
Saladin


M4EiB - Fr 19.07.02 01:53

du kannsts es dir noch einfacher machen, indem du anstatt den clientsocket-komponenten gleich die indy-http-komponente benutzt. bei der nmhttp-komponente kann man glaub ich nur einen string posten und die ganze datei in einen string laden, lieber nicht.
nur noch ne frage: ist das script auf dem server von dir, oder von nem anderen(z.b. upload script bei nem webspace-service oder so?)


Saladin - Fr 19.07.02 08:31
Titel: Von mir
Das Script ist von mir. Mein Programm lädt Bilder auf ein vorher definierte Website hoch (Die vom User), und soll so eine Art "Meine Bilder" im Web für Dummis werden.
Du wählst die Bilder aus die du haben willst, und schickst diese dann direkt auf deine Website. Ohne weiteres Umständliches FTP oder blöde Web Uploads machen zu müssen!
Du musst nur einmal das Script auf deine Website setzen und dir die URL merken, um Sie im Programm anzugeben.

Aber es ist natürlich möglich das Programm so umzuschreiben, das
es das upload script bei nem anderen bedienen kann.


MfG
Saladin


M4EiB - Fr 19.07.02 16:23

also hier mal ein quellcode-beispiel, wie der upload aussehen sollte(wurde aber nicht getestet!!).
ist das gleiche wie ein upload per ie, kannst ein scipt also standartmässig schreiben.

filename ist der pfad der datei
url die url zum script

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
var
 filest:tfilestream;
 post:tstringstream;
 tag,s:string;
 buffer:tstringstream;
 http:tidhttp;
begin


  http:=tidhttp.create(nil);
  buffer:=tstringstream.create('');
  post:=tstringstream.create('');
  filest := tfilestream.create(filename,fmOpenRead,fmShareDenyNone);

  tag := '7d292f3201ec';

  //der part muss für jede variable die mitübergeben werden soll wiederholt werden
  //'varname' ist der name und 'inhalt' der inhalt (naja logisch oder)
  s:=s+'-----------------------------'+tag+#13#10;
  s:=s+'Content-Disposition: form-data; name="varname"'+#13#10+#13#10;

  s:=s+'inhalt'+#13#10;
  //--------------


  //namepic ist der name mit dem die datei im phpscript identifiziert wird
  //( in html: es ist der name des <input type=file ... im uploadform)
  //filename ist der pfad zur datei
  s:=s+'-----------------------------'+tag+#13#10;
  s:=s+'Content-Disposition: form-data; name="namepic"; filename='+filename+#13#10;
  //folgendes für ein belibiege datei
  s:=s+'Content-Type: application/octet-stream'+#13#10+#13#10;
  //oder für ein image da geht das obere aber auch, also lieber immer das oben
  //s:=s+'Content-Type: image/pjpeg'+#13#10+#13#10;


  post.writestring(s);
  post.copyfrom(filest,0);

  //hier können auch noch variablen übergeben werden!

  s:='-----------------------------'+tag+'--'+#13#10#13#10;
  post.writestring(s);



  http.request.ContentType := 'multipart/form-data; boundary=---------------------------'+tag;
  http.request.Contentlength := post.size;

  

  try
   http.post(url,post,buffer)
  except
  end;

  //im buffer wird die antwort des scripts gespeichert, falls du das analysieren willst


  http.free;
  buffer.free;
  post.free;
  filest.free;
 

end;


Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt


Saladin - Fr 19.07.02 18:21
Titel: OK
Ein herzliches Dankeschön schon mal von mir, auch wenn es nicht klappen sollte (was ich nicht glaube). :lol:

MfG
Saladin