Laravel 5 尝试删除映像时Filesystem.php第381行出现FileNotFoundException
我正在使用Laravel5.0构建简单的插入和删除函数 但是它给了我一个错误: Filesystem.php第381行中的FileNotFoundException: 未在路径中找到文件:public/img/products/xxxxxx.xxx 我的代码是:Laravel 5 尝试删除映像时Filesystem.php第381行出现FileNotFoundException,laravel-5,Laravel 5,我正在使用Laravel5.0构建简单的插入和删除函数 但是它给了我一个错误: Filesystem.php第381行中的FileNotFoundException: 未在路径中找到文件:public/img/products/xxxxxx.xxx 我的代码是: public function postCreate(Requests\ProductRequest $request) { $product = new Product; $product->category_
public function postCreate(Requests\ProductRequest $request)
{
$product = new Product;
$product->category_id = Input::get('category_id');
$product->title = Input::get('title');
$product->description = Input::get('description');
$product->price = Input::get('price');
$product->status = Input::get('status');
$image = Input::file('image');
$filename = date('m-d-Y-H_i_s')."-". $image->getClientOriginalName();
$path = public_path('img/products/' . $filename);
Image::make($image->getRealPath())->resize(468, 249)->save($path);
$product->image = 'img/products/'.$filename;
$product->save();
return redirect('admin/products/')->with('flash_message','Product created');
}
public function postDestroy($id)
{
$product = Product::find($id);
if ($product) {
Storage::delete('public/'.$product->image);
$product->delete();
return redirect('admin/products')->with('flash_message', 'Product deleted');
}
return redirect('admin/products')->with('flash_message','Something went wrong , please try again');
}
我能知道发生了什么事吗?我尝试了以下几种选择:
文件::删除(无错误,但图像未删除)
\文件::删除(无错误,但图像未删除)
名称空间:
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Product;
use App\Category;
use Request;
use Illuminate\Support\Facades\Input;
use Intervention\Image\Facades\Image;
use Illuminate\Support\Facades\Facade;
use Storage;
use League\Flysystem\Filesystem;
use File;
5个月后,我使用Laravel5.1偶然发现了同样的异常。使用
Storage::delete()
,我尝试从存储文件夹的根目录向它传递指向我的删除目标文件的相对路径,但由于找不到文件而失败。在堆栈跟踪中,我看到调用Filesystem->delete时使用的路径相对于物理机器的路径无效。所以我用storage_path()./app/7/observe/1455749755.JPG'.
这就是堆栈跟踪变得有趣的时候。当我使用完整的true文件系统路径调用它时,它仍然抛出一个filenotfoundexception,但是显示为传递给文件系统->资产当前()
的路径的前导斜杠被去掉了。像这样:
Filesystem->assertPresent('home/vagrant/Proj/donk/storage/app/7/observe/1455749755 yet.JPG')
文件系统->删除('/home/vagrant/Proj/donk/storage/app/7/observe/1455749755 yet.JPG')
FilesystemAdapter->delete('/home/vagrant/Proj/donk/storage/app/7/observe/1455749755yet.JPG')
调用\u user\u func\u数组(数组(对象(FilesystemAdapter),'delete')、数组('/home/vagrant/Proj/donk/storage/app/7/observe/1455749755 yet.JPG')
FilesystemManager->\uu调用('delete',array('/home/vagrant/Proj/donk/storage/app/7/observe/1455749755 yet.JPG')
FilesystemManager->delete('/home/vagrant/Proj/donk/storage/app/7/observe/1455749755 yet.JPG')
Facade::uu callStatic('delete',array('/home/vagrant/Proj/donk/storage/app/7/observe/1455749755 yet.JPG'))
在observationcontroller.php第224行Storage::delete('/home/vagrant/Proj/donk/Storage/app/7/observe/1455749755 yet.JPG')
Filesystem->delete()
处于死区。但是传递给实际检查文件存在性的内容是相对的,在本例中不是有效的路径
我的解决方法是简单地使用File::delete()
,而不是使用Storage::delete()。当文件位于存储文件夹的根目录时,后者也许可以工作,但我不想麻烦测试它,因为这不是我想要做的。如果这是存储类的限制,在我看来就没有什么价值了
在github上发现了这个有趣的相关线程。显然这是故意的?看起来,呃,有缺陷
保存时,您使用的是
公共路径(…)
,删除文件时尝试使用它(而不是'public/。$product->image
)。默认情况下,文件夹是存储/应用程序。如果文件位于其他位置,您可以在配置/文件系统中制作自己的磁盘,例如'myDisk'=>['driver'=>'local','root'=>base_path('xyzFolder'),],
您可以像使用illumb\Support\Facades\Storage那样调用它;$data=Storage::disk('myDisk')->get('myFile.txt');这显然是为了获取文件,您可以通过遵循laravel文档执行任何其他功能。