Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Dateiupload mit TidHTTP.Post() senden 2bytes (#13#10) zuviel (https://www.delphipraxis.net/68639-dateiupload-mit-tidhttp-post-senden-2bytes-13-10-zuviel.html)

nat 3. Mai 2006 03:03


Dateiupload mit TidHTTP.Post() senden 2bytes (#13#10) zuviel
 
hallo.
ich benutze folgenden code um mit TidHTTP einen html-fileupload (per post)
zu senden.

Delphi-Quellcode:
var
  DataStream: TIdMultiPartFormDataStream;
...
    FHTTP.Request.ContentType := 'multipart/form-data';
    try
      DataStream := TIdMultiPartFormDataStream.Create;
      DataStream.AddFormField('german', '1');
      DataStream.AddFormField('u', 'Upload!');
      DataStream.AddFile('filecontent', filename, 'application/octet-stream');

      response := FHTTP.Post(FURL, DataStream);
    except
      //...
    end;
das klappt auch wunderbar (habs local mit nem php-script getestet).
das einzige problem ist, dass die hochgeladene datei 2 bytes
größer ist als die ursprüngliche datei. die beiden bytes sind immer
#13#10 (CRLF). an dem php-script liegt es nicht, das funzt 100%ig.
auf gut deutsch: indy hängt diese 2 bytes bei der anfrage einfach an.
habe auch schon mit dem content-type rumgefummelt, ohne erfolg.
hat jmd ne ahnung warum und wie ich das verhindern kann?

benutze delphi7 und indy9.

sh17 3. Mai 2006 13:03

Re: Dateiupload mit TidHTTP.Post() senden 2bytes (#13#10) zu
 
Selbst Indy ist nicht fehlerfrei. hab selbst schon ein paar Macken entfernt.

Wenn Du Dir also sicher bist, das Indy an der Stelle Mist macht (Quelltextposition und so), dann korrigier das ganze einfach mal.

nat 4. Mai 2006 01:14

Re: Dateiupload mit TidHTTP.Post() senden 2bytes (#13#10) zu
 
danke für den tipp, aber da sitze ich ja gut bei.
da kann ich mir auch selber ne routine schreiben,
die mir nen http-request zusammenbastelt und versendet.
da brauche ich dann indy nich mehr :(

SirThornberry 4. Mai 2006 05:07

Re: Dateiupload mit TidHTTP.Post() senden 2bytes (#13#10) zu
 
das Thema hatten wir bereits. Es liegt an der Version welche Verwendet wird. Am besten du suchst mal, da wurde auch gepostet was geändert werden muss.

nat 5. Mai 2006 21:22

Re: Dateiupload mit TidHTTP.Post() senden 2bytes (#13#10) zu
 
Zitat:

Zitat von SirThornberry
Am besten du suchst mal, da wurde auch gepostet was geändert werden muss.

was soll ich suchen?? :gruebel:

SirThornberry 5. Mai 2006 21:39

Re: Dateiupload mit TidHTTP.Post() senden 2bytes (#13#10) zu
 
ich hab grad mal gesucht und hab auch nicht wirklich was mit dem Zeilenumbruch gefunden. Angefangen hat es damals mit dem Thread:
http://www.delphipraxis.net/internal...?p=81171#81171
vielleicht gibts im letzten Beitrag auf Seite 2 die Lösung, hab mir den Link nie angeschaut

nat 5. Mai 2006 23:12

Re: Dateiupload mit TidHTTP.Post() senden 2bytes (#13#10) zu
 
nee, der nützt mir nich wirklich was (kannte den auch schon).

ich habe es grade aber selber so halbwegs gefunden.
probleme macht immer das letzte feld im post, egal
ob das n file is oder was anderes. wenn ich also
die reihenfolge verändere
Delphi-Quellcode:
        DataStream.AddFile('filecontent', FFiles[i], 'application/octet-stream');
        DataStream.AddFormField('german', '1');
        DataStream.AddFormField('u', 'Upload!');
dann wird die datei richtig gesendet (und das feld mit dem namen 'u' hat
ein zeilenumbruch zuviel).
man könnte ja auch noch n fake-feld anfügen, dann werden alle
felder richtig gesendet und nur das (unnütze) fake-feld
wird mit nem umbruch zuviel gesendet.

SirThornberry 5. Mai 2006 23:15

Re: Dateiupload mit TidHTTP.Post() senden 2bytes (#13#10) zu
 
Tritt das Problem mit dem Zeilenumbrauch auch auf wenn du die Parameter per Stringliste an die Post-Methode übergibst?

nat 5. Mai 2006 23:32

Re: Dateiupload mit TidHTTP.Post() senden 2bytes (#13#10) zu
 
keine ahnung, das is aber ja eigentlich auch egal, weil ich ja files mitsenden will.
da muß ich das ja über TIdMultiPartFormDataStream machen. wenn ich nur normal
forms versende benutze ich immer
Delphi-Quellcode:
//params = TStringList
response := http.Post(url, params);
und das funzt problemlos!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz