usuwanie zdjęć z serwera w laravelu

usuwanie zdjęć z serwera w laravelu
M2
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad rok
  • Postów:362
0

Witam, chciałbym usunąć zdjęcie z serwera, robię coś takiego jednak to nie działa :
Storage::delete(asset('photo.jpg'));
ma ktoś pomysł jak to powinno wyglądać żeby działało?

Patryk27
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

asset powinieneś wykorzystywać, gdy chcesz pobrać adres pliku do pobrania (z punktu widzenia użytkownika).

Storage::delete przyjmuje dane do lokalizacji pliku w katalogu storage/app (bądź podobnie - zależnie od konfiguracji).


edytowany 1x, ostatnio: Patryk27
M2
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad rok
  • Postów:362
0

ale jeśli zrobię tak: Storage::delete('photo.jpg'); też nie działa, czy to wina ścieżki? tzn, podaję złą ścieżkę do pliku?
p.s z asset improwizowałem, jak nie działało :D

edytowany 1x, ostatnio: michalos25
Patryk27
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

tzn, podaję złą ścieżkę do pliku?

Najwyraźniej.
Ew. nie masz praw do usuwania plików z tego katalogu - debuguj ;-)

asset improwizowałem, jak nie działało

Programowanie nie polega na zgadywaniu: https://en.wikipedia.org/wiki/Programming_by_permutation


M2
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad rok
  • Postów:362
0

Jak powinna wyglądać ścieżka zakładając że zdjęcie jest w folderze public/images a kod w kontrolerze?

Patryk27
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Storage::delete usuwa dane, jak sama nazwa fasady brzmi, domyślnie z katalogu storage.

Jeśli chcesz usuwać dane z innych katalogów, musiałbyś albo spróbować zrobić Storage::delete('../../public/foo'), lub dodać nowy dysk w ustawieniach wskazujący na katalog public, a nie storage, i do niego się odwoływać.

Przy czym nie jest to prawidłowe podejście - prawidłowo powinieneś modyfikować wyłącznie pliki z katalogu storage, a w public mieć symlinka do storage.


edytowany 1x, ostatnio: Patryk27
M2
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad rok
  • Postów:362
0

A jak już zapisuję pliki w katalogu storage/app to w jaki sposób mogę je wyświetlić na stronie?

Patryk27
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Nie przeczytałeś dokumentacji, prawda?
https://laravel.com/docs/5.6/filesystem


edytowany 1x, ostatnio: Patryk27
M2
Przeczytałem, jednak dalej nie wiem jak mam to zrobić. Normalnie można wyświetlić za pomocą asset a z dokumentacji zrozumiałem że w tym przypadku muszę to zrobić w kontrolerze
Patryk27
W dokumentacji masz wprost podane: Storage::url + odpowiedni symlink musi być utworzony.
M2
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad rok
  • Postów:362
0

wykonuję polecenia php artisan storage:link następnie chcę wyświetlić plik <img src="{{asset('storage/app/photo.jpg')"/> jednak nie działa

Patryk27
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

photo.jpg umieszczasz w /storage/public/photo.jpg, a dostęp masz poprzez asset('storage/photo.jpg') - tak robisz?


M2
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad rok
  • Postów:362
0

Teraz działa, dzięki. Teraz dodawanie. Jeśli dodaję pliki w ten sposób $image = Storage::putFile('public', $request -> file('image'')); zdjęcie trafia do katalogu public jednak link jaki trafia do bazy wygląda tak: public/hnlbC4d0HTTGKqDGf91xaYeZ3AAbG8XgCykHj47c.jpeg na początku ścieżki jest nazwa katalogu publici nie można tego wyświetlić asset('storage/photo.jpg') ponieważ jest błędna ścieżka. Jak dodawać te zdjęcia do katalogu publicjednak``` w taki sposób żeby nie było nazwy katalogu w ścieżce do bazy?

Patryk27
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

$request->file('image')->storeAs('costam.jpg')?


edytowany 1x, ostatnio: Patryk27
M2
teraz nie ma rozszerzenia pliku, tzn. plik .jpg jest bez .jpg itd. Nie dodaje rozszerzenia
Patryk27
To tylko przykład...
M2
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad rok
  • Postów:362
0

No dobra, to wiem ale co jeśli rozszerzenie będzie inne? Chodzi mi o to żeby to działało z automatu
mam taki kod

Kopiuj
$name = ....
$photo = Storage::putFileAs('public', $request -> file('photo'), $name
        );

no i jak wygenerować tą nazwę?
Normalnie to zrobiłbym to tak $name = time(); no ale wtedy nie będzie rozszerzenia

M2
ścieżka w bazie wygląda tak: public/HsiQxnibu3RKO6ysQeTDMZFtQZrv8ON7lvrOV3A3.jpeg
DO
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Warszawa
  • Postów:213
0

Przeczytaj raz jeszcze z uwagą dokumentacje bo tam jest wszystko bardzo prosto opisane, a nawet przytoczone są przykłady do wszystkiego.
Zresztą linki do fotek najczęściej gdzieś zapisujesz w bazie danych, więc czy to będzie photo.jpg czy zczxcxzcxzczxcxz.jpg to jak z bazy to pociągniesz to jest Ci obojętne jak wygląda nazwa.
Jak chcesz mieć konkretną nazwę to Patryk pokazał Ci storeAs(). Chcesz rozszerzenie pliku? masz np getClientOriginalExtension().

Laravel ma naprawde fajną dokumentacje, wystarczy poczytać :)

edytowany 1x, ostatnio: Doggye

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.