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?
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).
- Rejestracja:ponad 7 lat
- Ostatnio:12 miesięcy
- Postów:362
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
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
- Rejestracja:ponad 7 lat
- Ostatnio:12 miesięcy
- Postów:362
Jak powinna wyglądać ścieżka zakładając że zdjęcie jest w folderze public/images
a kod w kontrolerze?
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
.
- Rejestracja:ponad 7 lat
- Ostatnio:12 miesięcy
- Postów:362
A jak już zapisuję pliki w katalogu storage/app
to w jaki sposób mogę je wyświetlić na stronie?
Nie przeczytałeś dokumentacji, prawda?
https://laravel.com/docs/5.6/filesystem
- Rejestracja:ponad 7 lat
- Ostatnio:12 miesięcy
- Postów:362
wykonuję polecenia php artisan storage:link
następnie chcę wyświetlić plik <img src="{{asset('storage/app/photo.jpg')"/>
jednak nie działa
- Rejestracja:ponad 7 lat
- Ostatnio:12 miesięcy
- Postów:362
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 public
i nie można tego wyświetlić asset('storage/photo.jpg')
ponieważ jest błędna ścieżka. Jak dodawać te zdjęcia do katalogu public
jednak``` w taki sposób żeby nie było nazwy katalogu w ścieżce do bazy?
$request->file('image')->storeAs('costam.jpg')
?

- Rejestracja:ponad 7 lat
- Ostatnio:12 miesięcy
- Postów:362
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
$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
- Rejestracja:około 9 lat
- Ostatnio:około 6 lat
- Lokalizacja:Warszawa
- Postów:213
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ć :)
asset
a z dokumentacji zrozumiałem że w tym przypadku muszę to zrobić w kontrolerzeStorage::url
+ odpowiedni symlink musi być utworzony.