Как удалить файл из общей папки в laravel 5.1
Я хочу удалить новость из базы данных, и когда я нажимаю кнопку удаления, все данные из базы данных удаляются, но изображение остается в папке с загрузкой. Итак, как мне это работать. благодаря
Это моя функция снова, но не удаляет изображение из папки images/news в общедоступном каталоге>
public function destroy($id) {
$news = News::findOrFail($id);
$image_path = app_path("images/news/{$news->photo}");
if (File::exists($image_path)) {
//File::delete($image_path);
unlink($image_path);
}
$news->delete();
return redirect('admin/dashboard')->with('message','خبر موفقانه حذف شد');
}
Ответы
Ответ 1
Вы можете использовать метод PHP unlink() так же, как предложил @Khan.
Но если вы хотите сделать это способом Laravel, используйте метод File :: delete().
//Удаление одного файла
File::delete($filename);
//Удаление нескольких файлов
File::delete($file1, $file2, $file3);
//Удаление массива файлов
$files = array($file1, $file2);
File::delete($files);
Ответ 2
Используйте функцию разблокировки php, просто передайте точный путь к файлу, чтобы отключить функцию:
unlink($file_path);
Не забудьте создать полный путь к файлу, если он не хранится в БД. например
$file_path = app_path().'/images/news/'.$news->photo;
Ответ 3
этот метод работал для меня
Сначала поместите строку ниже в начале вашего контроллера:
use File;
ниже пространство имен в вашем php файле
$destinationPath = 'your_path';
File::delete($destinationPath.'/your_file');
$ destinationPath → папка внутри папки public.
Ответ 4
Сначала вы должны перейти в config/filesystems.php
и установить 'root' => public_path()
следующим образом:
'disks' => [
'local' => [
'driver' => 'local',
'root' => public_path(),
],
Затем вы можете использовать Storage::delete($filename);
Ответ 5
Попробуйте это: Laravel 5.5
public function destroy($id){
$data = User::FindOrFail($id);
if(file_exists('backend_assets/uploads/userPhoto/'.$data->photo) AND !empty($data->photo)){
unlink('backend_assets/uploads/userPhoto/'.$data->photo);
}
try{
$data->delete();
$bug = 0;
}
catch(\Exception $e){
$bug = $e->errorInfo[1];
}
if($bug==0){
echo "success";
}else{
echo 'error';
}
}
Ответ 6
Попробуйте использовать:
unlink('.'.Storage::url($news->photo));
Посмотрите точку и конкатенацию перед вызовом фасадного хранилища.
Ответ 7
Используя функцию PHP unlink()
, файл будет удален
$path = public_path()."/uploads/".$from_db->image_name;
unlink($path);
Приведенное выше удалит изображение, возвращенное $from_db->image_name
в папке public/uploads
Ответ 8
public function destroy($id) {
$news = News::findOrFail($id);
$image_path = app_path("images/news/".$news->photo);
if(file_exists($image_path)){
//File::delete($image_path);
File::delete( $image_path);
}
$news->delete();
return redirect('admin/dashboard')->with('message','خبر موفقانه حذف شد');
}
Ответ 9
Два способа удалить изображение из общей папки без изменения конфигурационного файла файловой системы laravel или возиться с функцией очистки чистого php:
- Используя локальное хранилище по умолчанию, вам нужно указать общедоступную подпапку:
Storage::delete('public/'.$image_path);
- Используйте публичное хранилище напрямую:
Storage::disk('public')->delete($image_path);
Я бы предложил второй путь как лучший.
Надеюсь, это поможет другим людям.
Ответ 10
самый простой способ удалить изображение новости - использовать событие модели, как показано ниже.
и модель удалит изображение, если новость удалена
сначала вы должны импортировать это в начало класса модели use Illuminate\Support\Facades\Storage
после этого в классе модели News
вы должны сделать это
public static function boot(){
parent::boot();
static::deleting(function ($news) {
Storage::disk('public')->delete("{$news->image}");
})
}
или вы можете удалить изображение в вашем контроллере с помощью
эта команда
Storage::disk('public')->delete("images/news/{$news->file_name}");
но вы должны знать, что диск по умолчанию является общедоступным, но если вы создаете папку в общей папке и помещаете на нее образ, вы должны установить имя папки до $news->file_name
Ответ 11
Сначала убедитесь, что файл существует, создав путь
if($request->hasFile('image')){
$path = storage_path('app/public').'/YOUR_FOLDER/'.$db->image;
if(File::exists($path)){
unlink($path);
}