• 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?

VPS Starter Arubacloud
+2 głosów
112 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 (251,250 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ź 435 wizyt
+1 głos
3 odpowiedzi 357 wizyt
pytanie zadane 15 września 2018 w C i C++ przez Piotr Batko Stary wyjadacz (13,190 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...