Laravel 5 文件删除错误
Laravel 5 File Delete Error
我的 laravel 5 网络应用程序存在文件删除问题。
我想从我的 table 中删除一个条目和相应的图像文件。
这是我的 table 结构。
Schema::create('master_brands',function($table){
$table->increments('pk_brand_id');
$table->string('brand_name');
$table->string('brand_logo');
$table->timestamps();
});
我在数据库中添加了 3 个品牌并将图像路径存储在 brand_logo 字段中,例如:(/uploads/masters/logocatagory_Computers & IT.png).
从数据库中删除记录时,我还想从上传文件夹中删除图像文件。
但是当我执行删除操作时,文件并没有被删除。
这是我的删除控制器。
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权限。 !!
我也试过存储class删除file.But没办法!!!..
我该如何解决这个问题?任何想法...:(
你做错了。您不可能从 URL 中删除文件,您必须提供文件路径而不是 URL
已编辑
假设您要删除的文件位于 public/uploads/masters/logocatagory_Computers
,您可以这样做:
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() 和注释默认 storage_path(),
'disks' => [
'local' => [
'driver' => 'local',
'root' => base_path(),
// 'root' => storage_path('app'),
],
然后在控制器中
use Illuminate\Support\Facades\Storage;
然后在public函数中使用存储模型
$path= 'uploads/masters/';
Storage::delete($path . $filname);
在Laravel 5.1.使用本地驱动时,注意所有的文件操作都是相对于你的配置文件中定义的根目录的。默认情况下,此值设置为 storage/app 目录。因此,
以下方法将文件存储在 storage/app/file.txt:
Storage::put('file.txt', 'Contents');
这将删除 storage/app
中的 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/app/uploads 目录中的 file.txt。
Storage::delete('file.txt');
今天我花了很长时间才弄明白的事情:
如果您尝试删除包装在 Laravel 自己的 Collection 包装器中的文件列表,您可能需要调用 ->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
我的 laravel 5 网络应用程序存在文件删除问题。
我想从我的 table 中删除一个条目和相应的图像文件。 这是我的 table 结构。
Schema::create('master_brands',function($table){
$table->increments('pk_brand_id');
$table->string('brand_name');
$table->string('brand_logo');
$table->timestamps();
});
我在数据库中添加了 3 个品牌并将图像路径存储在 brand_logo 字段中,例如:(/uploads/masters/logocatagory_Computers & IT.png).
从数据库中删除记录时,我还想从上传文件夹中删除图像文件。 但是当我执行删除操作时,文件并没有被删除。 这是我的删除控制器。
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权限。 !!
我也试过存储class删除file.But没办法!!!..
我该如何解决这个问题?任何想法...:(
你做错了。您不可能从 URL 中删除文件,您必须提供文件路径而不是 URL
已编辑
假设您要删除的文件位于 public/uploads/masters/logocatagory_Computers
,您可以这样做:
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() 和注释默认 storage_path(),
'disks' => [
'local' => [
'driver' => 'local',
'root' => base_path(),
// 'root' => storage_path('app'),
],
然后在控制器中
use Illuminate\Support\Facades\Storage;
然后在public函数中使用存储模型
$path= 'uploads/masters/';
Storage::delete($path . $filname);
在Laravel 5.1.使用本地驱动时,注意所有的文件操作都是相对于你的配置文件中定义的根目录的。默认情况下,此值设置为 storage/app 目录。因此,
以下方法将文件存储在 storage/app/file.txt:
Storage::put('file.txt', 'Contents');
这将删除 storage/app
中的 file.txtStorage::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/app/uploads 目录中的 file.txt。
Storage::delete('file.txt');
今天我花了很长时间才弄明白的事情:
如果您尝试删除包装在 Laravel 自己的 Collection 包装器中的文件列表,您可能需要调用 ->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