W mojej aplikacji internetowej użytkownicy mogą przesyłać pliki. Przed zapisywane i przechowywane, zawartość pliku są szyfrowane za pomocą czegoś takiego:Praca z zaszyfrowanymi plikami w Laravel (jak pobrać odszyfrowany plik)
Crypt::encrypt(file_get_contents($file->getRealPath()));
Następnie używać systemu plików, który pochodzi z laravel przenieść plik
Storage::put($filePath, $encryptedFile);
Mam tabeli do przechowywania informacji o każdym pliku z kolumnami takimi jak:
- id
- FILE_PATH
- nazwa_pliku
- original_name (obejmuje rozszerzenie)
teraz chcę użytkownika, aby móc pobrać ten plik zaszyfrowany. Mam jednak problem z odszyfrowaniem pliku i zwróceniem go użytkownikowi. W file downloads response section dokumentacji laravel, sugeruje, aby to zrobić:
return response()->download($pathToFile, $name, $headers);
Chce ścieżkę do pliku, który jest w porządku, ale w tym momencie mogę odszyfrować zawartość pliku tak, że to jest rzeczywiście czytelne?
I nie wydają się być w stanie to zrobić:
$encryptedContents = Storage::get($fileRecord->file_path);
$decryptedContents = Crypt::decrypt($encryptedContents);
... ale nie wiem jak przywrócić go do pobrania z określoną nazwą pliku.
Jesteś czarodziejem! Dziękuję Ci! W moim przypadku, gdy plik jest zapisany, jest on faktycznie nazwany z 32-bitowym typem wartości md5, ale zachowuję zapis oryginalnej nazwy pliku, włącznie z rozszerzeniem pliku. Więc jeśli masz 'pathinfo ($ fileRecord-> ścieżka_pliku, PATHINFO_BASENAME)', po prostu mam '$ fileRecord-> original_name' i to też działa dobrze. Dzięki jeszcze raz. – Marcel
Chociaż dla zapisu, w mojej metodzie jest komunikat ostrzegawczy na konsoli (przynajmniej w przeglądarce Chrome): 'Zasób interpretowany jako Dokument, ale przesłany z aplikacją typu MIME/strumień-oktetu:' ale nadal działa poprawnie. – Marcel
Możesz naprawić to ostrzeżenie, używając ['finfo :: buffer'] (http://php.net/manual/ro/function.finfo-buffer.php), aby uzyskać typ mime pliku z odszyfrowanego ciągu znaków (zakładając, że informacje zostały zaszyfrowane wraz z zawartością) i przekazując je wraz z odpowiedzią. Zaktualizowałem swoją odpowiedź, aby to uwzględnić. – Bogdan