Php Laravel 5文件删除错误
有一个与我的laravel 5 web应用程序有关的文件删除问题 我想从我的表中删除一个带有相应图像文件的条目。 这是我的桌子结构Php Laravel 5文件删除错误,php,mysql,file,laravel-5,delete-file,Php,Mysql,File,Laravel 5,Delete File,有一个与我的laravel 5 web应用程序有关的文件删除问题 我想从我的表中删除一个带有相应图像文件的条目。 这是我的桌子结构 Schema::create('master_brands',function($table){ $table->increments('pk_brand_id'); $table->string('brand_name'); $table->string('brand_logo');
Schema::create('master_brands',function($table){
$table->increments('pk_brand_id');
$table->string('brand_name');
$table->string('brand_logo');
$table->timestamps();
});
我在db中添加了3个品牌,并将图像路径存储在品牌logo字段中,如:(/uploads/masters/logo catagory\u Computers&IT.png)
当从数据库中删除记录时,我还想从uploads文件夹中删除图像文件。
但在执行删除操作时,文件未被删除。
这是我的删除控制器
public function branddelete($id)
{
$filename = DB::table('master_brands')->where('pk_brand_id', $id)->get();
$filname = url()."/app".$filename[0]->brand_logo;
File::delete($filname); // http://localhost/genie-works/devojp/app//uploads/masters/logocatagory_Computers & IT.png
}
该文件存在于我的目录和具有777权限的目录中
我还尝试了存储类来删除文件。但是没有办法
我如何解决这个问题?有什么想法吗(您的做法不对。您不可能从URL中删除文件,您必须提供文件路径而不是URL 编辑 假设要删除的文件位于
公用/上传/主机/登录分类\u计算机中
,则可以执行以下操作:
public function branddelete($id)
{
$filename = DB::table('master_brands')->where('pk_brand_id', $id)->get();
$filname = $filename[0]->brand_logo;
//example it.png, which is located in `public/uploads/masters/logocatagory_Computers` folder
$file_path = app_path("uploads/masters/logocatagory_Computers/{$filname}");
if(File::exists($file_path)) File::delete($file_path);
}
如果您将文件输出到Storage/app/,Storage::不工作,请更改/Config/Filesystems.php,尝试将您的“local”放在base_path()并注释default Storage_path() 然后在控制器中
use Illuminate\Support\Facades\Storage;
然后在公共功能中使用存储模型
$path= 'uploads/masters/';
Storage::delete($path . $filname);
在Laravel 5.1中。使用本地驱动程序时,请注意,所有文件操作都与配置文件中定义的根目录相关。默认情况下,此值设置为存储/app目录。因此 以下方法将文件存储在storage/app/file.txt中:
Storage::put('file.txt', 'Contents');
Storage::put('file.txt', 'Contents');
这将删除存储/应用程序中的file.txt
Storage::delete('file.txt');
如果要更改根目录,以“storage/app/uploads/”为例,您可以将filesystem.php设置为以下内容:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app/uploads/'),
],
...
然后,以下方法将文件存储在storage/app/uploads/file.txt中:
Storage::put('file.txt', 'Contents');
Storage::put('file.txt', 'Contents');
这将删除storage/app/uploads目录中的file.txt
Storage::delete('file.txt');
今天我花了很长时间才弄明白: 如果您试图删除用Laravel自己的集合包装器包装的文件列表,您可能需要调用
->all()
,以获取底层数组实例:
// The following is an example scenario
$files = Storage::list('downloads');
$collection = collect($files)->filter(function ($file) {
return str_contains($file, 'temp');
});
Storage::delete($collection->all()); // Note the "all()" call here
我已经编辑了我的答案。只需将public_path替换为app_pathi dude,您可以将您的邮件id.app\Models\File not found exception
use File;
放在控制器类的顶部,或者在(\File::exists($File_path))\File::delete($File_path);