Jak na upload přes HTTP?
Informace pro programátory
Jistě víte, že HTTP neboli Hypertext
Transfer Protocol je jakýsi jazyk, kterým se dorozumívá
internetový prohlížeč se serverem. Tímto protokolem se
stahují se internetové stránky, obrázky, datové soubory a přenášejí
údaje od klienta k internetovému serveru.
Při programování dynamických internetových aplikací v
ASP jsem narazil problém uploadu dat na server. Nejprve jsem si
myslel, že na to je komponenta FileSystemObject. Omyl - ta je
pouze pro práci se soubory na serveru. Pokud chcete soubor přehrát
od klienta na server, potřebujete speciální komponentu. V
konferenci jsem se dověděl o několika existujících komponentách
( SA-FileUpload, komponenta od PSTRUH software). Další cesta se
mi honila hlavou: udělat si prográmek třeba ve VB, který pošle
data podobným způsobem, jako se odesílá vyplněný formulář
z browseru na server. Syntaxe HTTP se dá nastudovat z různých
zrojů (např. z RFC). Popisuje se tam většinou struktura dat,
která posílá server klientovi, ale nikde jsem nenašel, jak
vypadají data, která jdou obráceně - od klienta na server. Ještěže
se v konferenci našel někdo, kdo dokázal pomoci. Prográmek iserver.exe
od Bc. Petra Vozky je právě tím řešením. Umí jednoduše
zobrazit to, co posílá klient serveru.
iSERVER
stupid socket server with static HTTP
response, (c)1999,2000 vozkych
Abych pravdu rekl, iserver byla takova desna rychlovka,
ktera mela jenom rychle vyresit jeden muj problem a v
zadnem pripade se nejedna o svetoborny soft. Nevyzaduje
zadne ovladani (Ctrl-C je jediny "hotkey",
ktery to zna ;-)). Presmerovat vystup do souboru, je
mozne jak pro normalni vypisy ( presmerovat std. vystup 1>
) tak pro chybova hlaseni ( presmerovat std. errorvystup
2> ). Navic jsem pridal moznost spustit iserver i na
jinem portu nez na std. HTTP 80. Odezva iserveru je vsak
nadale ve smyslu HTTP protokolu. Moznost spustit iserver
na lib. portu je prevazne kvuli moznosti provozovat na
jednom pocitaci jak normalni HTTP server tak i iserver
pro ruzne pokusy. Mate-li
zajem, muzete si iSERVER.exe stahnout
(16 kB) nebo sbaleny v zipu
(4 kB).
Prepinace pri startu: -r(nastaveni std. odpovedi na
pozadavek od klienta) a -p(cislo portu):
iserver.exe -r:Tudle
nudle -p:80 >vystup.txt >chyby.txt
Pozadavky programu: knihovny MFC42.DLL, WINSOCK.DLL.
Usage: iserver.exe -r:<response msg> -p:<port
for listening>
<response msg> = message for client
<port for listening> = port number for
server listening
|
\|/
(@ @)
+--------oOO---(_)---------------+
| vozkych = Bc.PETR VOZKA |
| email: vozkych@atlas.cz |
| www: http://massystems.tsx.org |
+--------------------oOO---------+
|__|__|
|| ||
ooO Ooo |
|
Nakonec ale všechno stejně dopadlo jinak. Tento úkol jsem
řešil pro web umístěný na serveru Czechia. Firma Zoner, která
Czechii provozuje, má (únor 2000) upload zatím vyřešen pomocí
cpshost.dll
od Microsoftu. Ten však nelze použít přímo v ASP.
Jde spouštět pouze přímo z HTML formuláře nebo adresní
řádky. Nemají žádnou komponentu, která by byla použitelná
přímo v ASP. Důvod? Žádná dostupná komponenta (aspoň
podle jejich vyjádření) nemá ošetřeno oprávnění pro přístup.
Hrozí nebezpečí, že bude někdo pracovat s cizími soubory,
což je naprosto nežádoucí. Když se podíváte na technické
info Czechie, zjistíte, že i FileScriptingObject si museli
naprogramovat vlastní. I komponentu pro upload si budou muset
napsat svoji. Snad se někdy dočkáme. :-)
Zatím jsem to tedy vyřešil tak, že uživatelé budou
uploadovat data ve dvou krocích. Napřed se pomocí cpshost.dll
přenese soubor s daty na server do adresáře, kam je zřízen uživateli
zvláštní FTP přístup. Potom se spustí import dat, který
pomocí FileSystemObject načte data ze souboru do databáze a po
dokončení soubor odstraní.
© 2000 JMA
|