Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logika uploadu zdjęć
Forum PHP.pl > Forum > PHP
james8
Witajcie,

Buduje mały portal, załóżmy że będzie to baza firm, dla każdej firmy chciałbym dodać logo w formacie graficznym.

Zastanawiam się jakiej logiki użyć do przechowywania zdjęć. Początkowo myślałem o uploadzie zdjęć do bazy, ale sądzę że przy dużym natężeniu ruchu baza może powodować powolne działanie serwisu.

Jakie są inne możliwości uploadu grafiki może poprzez protokół ftp? Jak generować linki do zdjęć? Jak kojarzyć pliki z rekordami w bazie? Może tworzyć katalogi dla każdej firmy żeby nie pogubić się ze zdjęciami?
nospor
Zdjecie do serwisu dodajesz normalnie, przez formularz, tylko ze nie zapisujesz go w bazie a na dysku, a w bazie trzymasz tylko info o nim - dzieki temu nie stracisz informacji gdzie ono jest i moze swobodnie je wyswietlac dla danej firmy
james8
Cytat(nospor @ 30.08.2013, 09:15:47 ) *
Zdjecie do serwisu dodajesz normalnie, przez formularz, tylko ze nie zapisujesz go w bazie a na dysku, a w bazie trzymasz tylko info o nim - dzieki temu nie stracisz informacji gdzie ono jest i moze swobodnie je wyswietlac dla danej firmy


Czy dobrze będzie tworzyć katalog dla każdej firmy (i nadawać mu nazwę tej firmy) a zdjęciom nadawać jednolitą nazwę np. logo.jpg?

Czy lepszym rozwiązaniem będzie utowrzenie jednego zbiorczego katalogu do przechowywania zdjęć, a każdemu ze zdjęć nadawać nazwę numeryczną (np zwiększającą się o jeden)?

Przyszedł mi też pomysł do głowy, że zdjęcia można numerować rekordem ID firmy, jeśli dana firma będzie miała więcej zdjęć niż jedno można zastosować następującą numerację: ID_kolejnyNumer

Albo utworzyć katalog odpowiadający ID firmy w bazie, a zdjęcia numerować numerycznie rosnąco
nospor
A rob jak ci wygodnie, struktura katalogow w tej sytuacji bedzie miala jedynie znaczenie wizualne dla programisty.
Osobiscie nie widzie sensu robic folderow na firmy, szczegolnie ze zamierzasz tam wkladac tylko po jednym zdjeciu.
james8
Cytat(nospor @ 30.08.2013, 09:27:25 ) *
A rob jak ci wygodnie


Problem w tym że sam nie wiem jak jest mi bardziej wygodnie, jestem strasznie niezdecydowany hehe

Cytat(nospor @ 30.08.2013, 09:27:25 ) *
Osobiscie nie widzie sensu robic folderow na firmy, szczegolnie ze zamierzasz tam wkladac tylko po jednym zdjeciu.


Na dzień dzisiejszy będzie to tylko jedno zdjęcie, ale w przyszłości może wystąpić potrzeba dodania większej ilości zdjęć


Wpadłem na pomysł który podsunął mi nospor, można zrobić tak:

Wgrywać zdjęcia na serwer, stworzyć zmienną przechowującą ścieżkę dostępu do pliku, natomiast w bazie stworzyć kolumnę przechowującą adres do pliku.

Ta dam! Dobrze myślę?
nospor
Cytat
Wgrywać zdjęcia na serwer, stworzyć zmienną przechowującą ścieżkę dostępu do pliku, natomiast w bazie stworzyć kolumnę przechowującą adres do pliku.
No a niby oczym ja na samym poczatku ci powiedzialem? Ze w bazie masz trzymac info gdzie to zdjecie jest...ot mi geniusz.... tongue.gif
Ino nie musisz trzymac calej sciezki do zdjecia, tylko sciezke wzgledna. Całą to sobie dobudujesz przy wyswietlaniu
james8
Cytat(nospor @ 30.08.2013, 09:45:11 ) *
No a niby oczym ja na samym poczatku ci powiedzialem? Ze w bazie masz trzymac info gdzie to zdjecie jest...ot mi geniusz.... tongue.gif
Ino nie musisz trzymac calej sciezki do zdjecia, tylko sciezke wzgledna. Całą to sobie dobudujesz przy wyswietlaniu


tongue.gif
llukasz
Najlepiej jest zrobić jakaś nazwę sztuczną dla pliku graficznego (może być hash sha)

Następnie tworzysz katalogi - powiedzmy 5 pięter - tak że jak plik nazywa się abcd123 to jest w ścieżce a/b/c/d/1/abcd123.jpg

W bazie przechowujesz informację w formie abcd123.jpg

To jest chyba najbezpieczniejsze rozwiązanie i najefektywniejsze wydajnościowo smile.gif

Pozdr.
Turson
Jak już zamierzam trzymać wszystkie zdjęcia w jednym folderze (co jest najlepszym rozwiązaniem), musisz generować nazwę i sprawdzać, żeby nie było duplikatów.
waldemi
Cytat(TursoN @ 30.08.2013, 14:02:34 ) *
Jak już zamierzam trzymać wszystkie zdjęcia w jednym folderze (co jest najlepszym rozwiązaniem), musisz generować nazwę i sprawdzać, żeby nie było duplikatów.

Żeby nie było duplikatów najlepiej jako nazwę pliku użyć znacznika czasu. 100 % gwarancji że się nie powtórzą.
Crozin
1. Nazwa to mniej lub bardziej losowy ciąg znaków, który losujesz aż uzyskasz unikalny wariant (niemal zawsze będzie to za pierwszym razem). To na podstawie czego losujesz nie ma większego znaczenia. Istotne jest tylko byś sprawdzał czy aby na pewno wylosowany ciąg jest unikalny. W żadnym wypadku nie korzystaj ze wspomnianego wyżej znacznika czasu, bo ten nie daje absolutnie żadnej gwarancji unikalności.
2. Pierwszych kilka znaków wylosowanej nazwy możesz potraktować jako nazwy podkatalogów, np. losując "dsadcznsdsado32m2e12dsadsawqkje213.png" finalna ścieżka to "dsa/dcz/nsd/sado32m2e12dsadsawqkje213.png". Jest to o tyle przydatne, że zmniejsza ilość plików w pojedynczych katalogach, co samo w sobie złe nie jest, ale jeżeli chciałbyś przeglądnąć zawartość katalogu z setkami tysięcy plików wiele programów mogłoby się wysypać przy tym. To jak długie będą nazwy podkatalogów i ile ich będzie to już Twoja decyzja.
3. Do bazy ląduje jedynie relatywna ścieżka do pliku, tj.: dsa/dcz/nsd/sado32m2e12dsadsawqkje213.png oraz jakieś metadane. Ewentualnie możesz rozważyć przechowywanie rozszerzenia pliku w osobnej kolumnie, na wypadek gdybyś chciał uniknąć "duplikatów" o różnych rozszerzeniach (abcdef.png oraz abcdef.jpeg).
miej95
Kiedyś rozwiązałem to tak:
Każda "firma" miała swój uniqueId (przy dodawaniu firmy do bazy był on generowany) a po "_" był numer zdjęcia z kolei czy tam funkcja tego zdj, np. logo. wyglądało to mniej więcej tak: SDF23j423423_logo.jpg . Nie rób osobnych folderów bo będziesz miał kipisz na serwerze.

@UP. też myślę że zastosowanie aktualnego czasu jest dobrym rozwiązaniem
Crozin
Timestamp ma taka wadę, że w przypadku gdy dwie osoby robią coś w tym samym czasie jest on identyczny, nie unikalny.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.