Autor Zpráva
zdenek
Profil
ahoj, prosím vás.

jak dostanu obrázek do databáze, a poté ho zobrazím?

předem děkuji
Jostram
Profil *
zdenek:
Databáze není filesystém. Nechte obrázek na disku a do databáze si dejte akorát cestu k obrázku.
Joker
Profil
zdenek:
Obrázek jsou binární data, takže se dají uložit do sloupce typu BLOB.
zdenek
Profil
a jak dostanu tu "cestu?"
xmark
Profil
zdenek:
A jak dostaneš obrázek na server?
zdenek
Profil
xmark:
A jak dostaneš obrázek na server?
nahraju ho tam.
Jostram
Profil *
zdenek:
Třeba že máte obrázek ve "data/images/image_001.jpg" a do databáze si dáte něco takového:
idi     path                        name
1      "data/images/image_001.jpg"  "Obrázek 001"
1      "data/images/pepa_repa.jpg"  "Josef Řepa"

A do stránky to sázíte do tagu <img>. Obecně se dá říct, že databáze není to nejlepší místo, kam cpát soubory.
zdenek
Profil
Jostram:
Obecně se dá říct, že databáze není to nejlepší místo, kam cpát soubory.

a kam mám dát obrázky, když ne do databáze?
Jostram
Profil *
zdenek:
Na disk
zdenek
Profil
a když chci, aby uživatel nahrál obrázek, kam ho mám uložit?
Jostram
Profil *
zdenek:
na disk - do nějaké složky, kterou si pojmenujete třeba upload
zdenek
Profil
a jak by vypadal script?
Jostram
Profil *
BASH? C? Python? Ruby On Rails? Java? Flash? PHP?

Jestli PHP, tak doporučuji studium třeba těchto materiálů.
zdenek
Profil
použil jsem váš návod a funguje. bohužel nevím, jak zase zpětně dostat ty obrázky zpět.
xmark
Profil
zdenek:
Co přesně znamená „jak zase zpětně dostat ty obrázky zpět“?
zdenek
Profil
ja je zobrazit na stránce. např. uživatel nahraje logo a pak se zobrazí na hlavní stránce.
TomášK
Profil
Jostram:
A proč ne obrázek do databáze? Mám zaručené, že se mi od něj neztratí doprovodná data, nemusím se starat o zálohování na více místech, rozdíl v rychlosti je myslím zanedbatelný (a ani nevím, kdo vyhraje).

zdenek
V databázi bude BLOB, který bude obsahovat totéž, co by obsahoval soubor s obrázkem. A ty jen vygeneruješ (třeba v php) soubor, který místo HTML vypíše na výstup obsah toho BLOBu a pošle to se správnými hlavičkami. Na internetu je spousta příkladů - např. na "Store image database", vládneš-li angličtinou.
zdenek
Profil
co to znamená?


Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

Moderátor Davex: Tento problém se řeší v samostatném vlákně Parse error - co to znamená?*.
Jostram
Profil *
TomášK:
Proč cpát binární data do db, když k tomu není důvod? A na jakých "více místech"? Na více místech nic nemá - obvykle jsou dvě místa - složka s WWW projektem a databáze. Jaká "další místa" máte na mysli? Vše se přeci odehrává v relaci jednoho webového projektu.

Problém v rychlosti je zejména tehdy, když máte nastavená nějaká omezení na DB - počet spojení a dotazů zbytečně roste. Možná je to přežitek z dob dávno minulých, ale proč zbytečně zatěžovat databázový server věcmi, které jdou mnohem jednodušeji udělat v rámci souborvého systému, který je obvykle velmi dobře uzpůsoben k práci se soubory? Spojení DB server <-> webserver navíc bývá velmi často tzv "bottleneck". Další plus pro FS je cache. Snad v jednom místě zde vyhrává databáze - velké množství malých souborů (desítky tisíc souborů o velikosti 1kb) - v tomto případě databáze skutečně vítězí.

Dump databáze obsahující víc než 5MB bych skutečně chtěl nahrávat přes webové rozhraní (k SSH obvykle není přístup) nebo PHP skriptem, kde mi dřív vyhnije spojení, než se zpracuje. Nedej bůh, když byste byl nucen migrovat na platformu, kde není datový typ BLOB tak úplně kompatibilní.

zdenek:
znamená to, že parser narazil na nějakou chybu - znak (mezera), kterou neočekával a říká, že očekával string, proměnnou nebo číslo
TomášK
Profil
Jostram:
Projekt mám zpravidla v repository, kam obrázky (nebavíme se momentálně o ikonách na stránce, ale např. o fotogalerii) nepatří. Tedy pokud mám obrázky mimo databázi, musím řešit zálohování jak databáze, tak dalších dat. V databázi můžu lépe pracovat s oprávněními, využívat transakce při ukládání obrázku s medadaty. Cachování také neobstojí - databáze snad nacachuje? Navíc pracuje nad nějakým filesystémem, tedy využívá i jeho cachování. Na fotky apod. se dá nahlížet na data a databáze je dělená na práci s daty (což je argument blbý, ale stejně kvalitní jako že obrázek je soubor a FS je dělaný pro práci se soubory). Tu je článek (pravda, z roku 2006) o tom, že mezní velikost nemusí být 1kb, ale 256kb-1MB. Pro své projekty přístup přes ssh mám, databáze pro některé mé weby mají stovky MB.

Nechci ukládání do databáze obhajovat jako jediný správný přístup, ale má své výhody a nevýhody a situace není taková, že by vždy bylo ukládání na FS lepší. Používám obě varianty pro různé projekty, podle toho, co v konkrétní situaci převažuje. Většinou právě FS, ale ne vždy. Nechť si to autor rozhodne sám, diskuzí na toto téma proběhlo už hodně.
xmark
Profil
TomášK:
Myslím že podstatná otázka je, jestli zdenek, který má problémy typu syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING, má využít variantu "BLOB", nebo variantu "seznam souborů". Hlasuju pro tu druhou z nich.
TomášK
Profil
xmark:
Máš pravdu. Parse error přišel až po začátku diskuze o db vs FS, reagoval jsem tedy spíše na Joastrama, ale měl jsem tam připsat že pro tento případ bude zřejmě vhodnější FS.
Jostram
Profil *
TomášK:
Abychom si porozumněli - jsou skutečně místa, kdy je DB vhodnější/rychlejší pro ukládání souborů, ale jsou to dost specifické situace. Z toho, co psal tazatel jsem vyvodil spíše to, že neumí pracovat s uploadem a svou neznalost supluje hozením větší zátěže na databázový server.

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