Odbieranie pliku (metoda post), parser...?

0

witam.

szukalem szukalem i absolutnie nic nie znalazlem.
natknalem sie na podobny problem na forum lecz bez rozwiazania:
http://4programmers.net/Forum/332803?h=post%20method#id332803

pisze prosty serwer www i chcialem miec mozliwosc uploadowania na niego plikow.
beda wysylane ze strony internetowej metoda "POST".
problem polega na tym ze w streamie otrzymuje cos takiego:

------------Ij5Ij5Ij5gL6ei4KM7gL6KM7cH2ei4
Content-Disposition: form-data; name="Filename"

plik.txt
------------Ij5Ij5Ij5gL6ei4KM7gL6KM7cH2ei4
Content-Disposition: form-data; name="PHPSESSID"

<?php echo session_id(); ?>
------------Ij5Ij5Ij5gL6ei4KM7gL6KM7cH2ei4
Content-Disposition: form-data; name="Filedata"; filename="plik.txt"
Content-Type: application/octet-stream

TRESC_PLIKU

------------Ij5Ij5Ij5gL6ei4KM7gL6KM7cH2ei4
Content-Disposition: form-data; name="Upload"

Submit Query
------------Ij5Ij5Ij5gL6ei4KM7gL6KM7cH2ei4--

pojawia sie pytanie jak takie dane sparsowac zeby wyciagnac nazwe pliku oraz jego zawartosc.
operowanie na stringach odpada bo wystarczy ze gdzies w przesylanym pliku bedzie znak #0 i string zostanie uciety.

wszedzie w internecie widze tylko pytania o wysylanie pliku a nigdzie nie ma o jego odbieraniu;/
jakies pomysly?

0

co CI odpada. Bzdura. Użyj funkcji POS, COPY oraz DELETE.

Jak stringi faktycznie ucina w co nie wierze to użyj tstringlist i sprawdzaj linijki w pętli.

x := Pos('filename=', string) + 9   //pos zwraca wartość na początku szukanego tekstu wiec musisz dodać do niego liczbe liter.

potem już tylko copy(s, x, koniec tekstu)

Zawsze możesz także operować funkcją delete by np uciąć do pewnego momentu.

0

Legalnl możesz wierzyć albo nie ale string się ucina na każdym #00 i żadne TStringList to by dopiero było...
Chyba gdzieś pobiera ten plik i to pewnie jest TMemoryStream a jego właściwość Memory można rzutować na PChar więc z tym problemu nie ma chodzi o parsowanie początek pliku jako tako jak napisałeś można znaleźć przez Pos natomiast co z jego końcem? Dlaczego nie ma w nagłówkach Content-Length lub zawartość pliku nie jest zakodowana np. base64 wnioskuję tak bo nie ma w nagłówku Content-Transfer-Encoding i jak autor pisze można napotkać #00 (gdyby była kodowana odpada możliwość wystąpienia #00 więc można uznać, że plik się kończy na pierwszym napotkanym #00).
Ja myślę że coś masz nie tak z tym wysyłaniem lub serwerem skoro nie zwraca tych nagłówków no i zawartość pliku powinna być kodowana.

1 użytkowników online, w tym zalogowanych: 0, gości: 1