Autor Zpráva
matti
Profil *
Dobrý den,

řeším způsob uchovávání souborů v CMS, které uživatel do systému nahraje. Cílem je umožnit uživateli CMS ukládat soubory do stromové struktury složek, jako je zvyklý např. z TotalCmd nebo průzkumníka Win (tomu by odpovídala i grafická úprava webové aplikace).

Možnosti řešení, které zvažuji:

1) Stromová struktura prezentovaná uživateli odpovídá fyzické struktuře souborů/složek v úložišti ("fyzická struktura")
+ jednoduché na implemetnaci
+ uživatel může přistupovat k objektům jak přes ftp (fyzicky), tak přes webové rozhraní
- nemožnost řešit přesun / přejmenování / smazání souboru, který je např. přiložen k některému článku

2) "Virtuální struktura"- každý nahraný soubor je zaznamenán v db, soubory mohou být uloženy v jedné složce, stromová struktura vzniká "virtuálně" na základě záznamů v db
- nemožnost přistupovat přes FTP (uživatel odkázán na webový upload: nepraktické při větším počtu souborů nebo při uploadu velkého souboru - limity v konfiguraci PHP)
- složitější implementace
+ kompletně řeší integritu při přesunu/přejmenování položky (předává se ID záznamu, které je konstantní bez ohledu na fyzické umístění souboru)

U "fyzické struktury" mi vadí nemožnost kontrolovat integritu při smazání/přesunu položky. Virtuální struktura se mi nelíbí z principu: existence souboru sama o sobě je informací, ale já si tutéž informaci ukládám ještě na jiné místo (db) - nutnost udržovat integritu mezi filesystemem a záznamy v db.

Děkuji za vaše názory a návrhy.
na1k
Profil
Volil bych kombinaci obojího. Osobně používám fyzickou strukturu, už kvůli možnosti přistupovat přes ftp (pro mě, i klienty důležité - zkuste nahrávat JEN 50 souborů pře web :-)). Kombinuju to ale se záznamy v databázi, kde pro každý soubor vedu jeho unikátní ID (hash například názvu souboru a velikosti) a zároveň cestu. Při dalším provázání například s články se odkazuju do databáze pomocí ID, ze kterého dále můžu vyčíst cestu a další detaily souboru, aniž bych k němu fyzicky přistupoval. Když bych potom na webu potřeboval vypsat například strom adresářů, můžu to teoreticky vypsat pouze z databáze anebo přímo z disku, protože struktura bude stejná. Odpadá tím problém s mazáním a přesunem souborů, ale je třeba zajistit, aby se nově přidané soubory zaindexovaly do DB, protože by v systému "nebyly vidět" (v případě výpisu z DB)

...a taky by mě zajímalo jak to řeší ostatní :-) Pochlubte se ;-)
matti
Profil *
Díky za názor. Souhlasím, že FTP vstup pro uživatele CMS by měl zůstat zachován.

Přemýšlel jsem ještě nad dalšími možnostmi, pokud by někoho zajímaly, shrnuji je níže. Budu rád, se k nim vyjádříte a připojíte svoje zkušenosti.

Napadá mě ponechat fyzickou strukturu a soubory, které budou nějakým způsobem připojeny třeba ke článku, zkopírovat ("zrcadlit") do jiné složky, která by nebyla přístupná z ftp. Nevýhodou by byla větší spotřeba místa (podle mě těžké určit - pro některé menší weby by toto mohlo být řešení, u větších webů s mnoha soubory by se rychle spotřebovalo dostupné místo). V složce se zrcadlenými objekty by se mohly kontrolovat duplicity (velikost souboru + hash).

Ještě zvažuji kompromisní řešení mezi fyzickou a virtuální strukturou:

a) Fyzická struktura + v db vedení tabulky změn (přesuny, přejmenování). V případě nenalezení objektu možnost hledat v tabulce přesunů a příp. odpovídající redirect. Nevýhoda - nelze trasovat změny provedené přes FTP (řešení - viz zrcadlení výše).

b) Virtuální struktura + FTP vstup do jiné složky, než do úložiště souborů. Soubory nahrané přes FTP by se mohly zobrazit v nějakém "zásobníku", odkud by si je uživatel na webu zařadil do virtuálního stromu dle libosti. Nevýhody - složitější implementace, složitější pro uživatele (víc kroků). Možnost upravit tak, že soubory z ftp "zásobníku" by se přidávaly do virtuálního stromu automaticky.

c) Kombinace virtuálního stromu + fyzického úložiště s ftp přístupem. V rámci (virtuálního) stromu prezentovaného uživateli by byla složka "FTP", která by obsahovala fyzický strom z disku. Uživatel by to měl na vlastní nebezpečí - pokud v této složce něco přesune/smaže, může se mu to podělat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0