• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak zarządzać ścieżką plików znajdujących się na wielu maszynach i przechowywać tą ścieżkę w baze danych?

Object Storage Arubacloud
+2 głosów
114 wizyt
pytanie zadane 8 lipca 2021 w JavaScript przez FoLONG Nowicjusz (160 p.)
Zastanawiam się jak zarządzać plikami które znajdują się na kilku serwerach, mianowicie użytkownik wysyła plik na serwer a load balancer przekierowuje użytkownika na maszynę która jest najmniej obciążona i plik jest zapisywany na tej maszynie. Teraz jak zapisać ścieżkę do pliku w bazie danych tak aby użytkownik zawsze był przekierowany na maszynę która posiada jego plik?

1 odpowiedź

0 głosów
odpowiedź 10 lipca 2021 przez VBService Ekspert (252,780 p.)
edycja 10 lipca 2021 przez VBService

Propozycja,

Podzieliłbym na kolumny np. tak:

 id   id_user   server_name   file_name   ext   date 
1 u828 fs-001  ad235ser676734  jpg  2021-07-09 
2 u828 fs-003  dd349qwn99991  png  2021-07-10 

 

i później np. w php-ie połączyć te dane w ścieżkę

(nazwa obrazka - ad235ser676734 - wygenerowana w czasie upload-u)

<img src="image.php?uid=u828.ad235ser676734">

np. image.php

<?php
  session_start();

  if (Czy user jest zalogowany np. $_SESSION('logged_user_id')) {
    if (!empty($_GET['uid'])) {
      list($id_user, $file_name) = explode('.', $_GET['uid']);
   
      // sprawdzenie danych
      // np. u 828 - id_user to 1 mała litera i 3 cyfry
      $id_user = (preg_match("/^[a-z][0-9]{3}/", $id_user)) ?  $id_user : null;
      // np. ad 235 ser 676734 - file_name to 2 małe litery, 3 cyfry, 3 małe litery i do końca cyfry nie mniej jak 5 cyfr i więcej
      $file_name = (preg_match("/^[a-z].[0-9]..[a-z]..[0-9]{5,}/", $file_name)) ?  $file_name : null;

      if (($id_user && $file_name) && $_SESSION('logged_user_id') == $id_user) {
        define('PATH_TO_USERS_FILE','users/{{id_user}}/uploaded/');

        // tu połaczenie z bazą danych
        // przykładowy $sql = "SELECT server_name, ext FROM uploaded_users_files WHERE id_user = '$id_user' AND file_name = '$file_name'";
    
        if (SQL zwrócił wartość poprawnie) {
          $server_name = $row['server_name']; // np. 'fs-001';
                  $ext = $row['ext']; // np. 'jpg';
      
          $full_path = "https://xxx.pl/$server_name/"
                     . str_replace('{{id_user}}', $id_user, PATH_TO_USERS_FILE) . "$file_name.$ext";

          $fp = fopen($full_path, 'rb');

          header("Content-Type: image/{$ext}"); 

          fpassthru($fp);
          exit;
        }
      }
    }
  }
?>

można też zostawić samą nazwę obrazka, a id_user pobierać z sesji.

<img src="image.php?uid=ad235ser676734">

i odpowiednio dopasować image.php.

Podobne pytania

+1 głos
1 odpowiedź 446 wizyt
+1 głos
3 odpowiedzi 372 wizyt
pytanie zadane 15 września 2018 w C i C++ przez Piotr Batko Stary wyjadacz (13,190 p.)

92,555 zapytań

141,403 odpowiedzi

319,553 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...