Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Obrazy w MySQL

Jak powiedziałem wcześniej, blob jest to droga do zrobienia, jednak, jak wskazuje SanHolo, nie jest to tak naprawdę wydajne i w końcu napotkasz problemy, ponieważ Twoja baza danych może rosnąć naprawdę szybko!

Dlaczego nie zindeksujesz nazwy pliku w bazie danych i przechowasz plik na serwerze ?

Głównym powodem, dla którego nie można pozwolić na coś takiego, byłyby kwestie bezpieczeństwa. Jeśli naprawdę próbujesz zakryć swoje podstawy, nie pozwalając wszystkim użytkownikom na oglądanie lub pobieranie treści, masz dwie opcje.

Opcja A) nadaj plikowi unikalną, niemożliwą do zidentyfikowania nazwę, tak jak robi to Flickr. Nazwa pliku zawiera dwa skróty. Skrót użytkownika i skrót pliku. Drugi skrót jest tajny i jedynym sposobem, w jaki można go uzyskać, jest próba i błąd. Spójrz na ten plik, który mam na Flickr . Jest chroniony przez użytkowników (widzi je tylko rodzina), ale będziesz mieć do niego dostęp, ponieważ sam adres URL służy jako ochrona:http://farm2.static.flickr.com/1399/862145282_bf83f25865_b.jpg , nawet jeśli losowo próbowałeś wygenerować skróty i znalazłeś poprawny, zostałby on ukryty przez anonimowość, ponieważ nie wiedziałbyś, od kogo pochodzi.

Opcja B) użyj thecnology po stronie serwera, aby ograniczyć dostęp. Ta metoda jest bezpieczniejsza, ale droższa dla serwera. Skonfigurujesz skrypt, który zezwoli/odmówi dostępu do pliku w oparciu o session_permissions lub coś podobnego. Spójrz na następujący kod, który zostałby wywołany, uzyskując dostęp do czegoś takiego:

http://yourserver.com/getprotectedfile.php?filename=213333.jpeg

session_start();

// logic to verify the user is ok
if($_SESSION['user_access']!=true) {
    exit('user not allowed here');

// WATCHOUT! THIS IS NOT SECURE! EXAMPLE ONLY.
// on a production site you have to be sure that $filename will not point to a system file
$filename = $_GET['filename'];

// gets the file and outputs it to the user
header('Content-type: image/jpeg');
header('Content-Length: '.filesize($filename));
readfile($filename);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zapisać podpis w MySQL

  2. Raportowanie błędów przygotowanych przez MySQLi

  3. nie można wyświetlić wyników zapytania w widoku codeigniter

  4. com.mysql.jdbc.PacketTooBigException java

  5. Zapytanie MySQL w celu przypisania unikalnej liczby losowej do każdego wiersza