PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak rozpoznać plik tekstowy z mojego komputera z systemem Linux za pomocą kodu django bez sprawdzania jego rozszerzenia i rozmiaru pliku?

Prawdopodobnie chcesz wykryć typ MIME przesyłanego pliku niezależnie od rozszerzenia pliku, a często robi się to poprzez odczytanie nagłówka pliku w celu wykrycia „magicznych liczb” lub innych wzorców bitowych wskazujących prawdziwą naturę pliku. Często pliki tekstowe są przypadkiem brzegowym, w którym nie wykryto nagłówka, a pierwsze x bajtów można wydrukować w formacie ASCII lub Unicode.

Chociaż jest to trochę króliczej nory, w której można się zanurzyć, jest kilka bibliotek Pythona, które zrobią to za Ciebie. Na przykład:https://github.com/ahupp/python-magic będzie działać zgodnie z Twoimi potrzebami, po prostu wywnioskując typ MIME na podstawie zawartości pliku, który następnie dopasujesz do typów, które chcesz zaakceptować.

Nieco powiązany zestaw przykładowych kodów dostosowanych do Twoich potrzeb można znaleźć tutaj:https://stackoverflow.com /a/28306825/7341881

Edycja:rozwiązanie Eddiego jest równoważne funkcjonalności; python-magic opakowuje libmagic, do którego wykorzystuje natywne polecenie „plik” Linuksa. Jeśli zdecydujesz się przejść na ścieżkę podprocesu, bądź bardzo ostrożny, aby nie stworzyć luki w zabezpieczeniach przez niewłaściwą dezynfekcję danych wejściowych użytkownika (np. podana przez użytkownika nazwa pliku). Może to doprowadzić do ataku dającego arbitralny dostęp do środowiska wykonawczego serwera.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Określanie odrębnej sekwencji na tabelę w Hibernate na podklasach

  2. Postgresql wymusza unikalną dwukierunkową kombinację kolumn

  3. Odwołaj się do aliasu nazwy kolumny w klauzuli WHERE

  4. Postgres:konwertuj jeden wiersz na wiele wierszy (unpivot)

  5. Kolumna błędu c.CreatedOn nie istnieje... w dziennikach PostgreSQL podczas inicjalizacji pierwszego kontekstu kodu przy użyciu dostawcy Devart dotConnect