我和这个家伙有同样的错误:
基本上我的错误是将图像上传到特定路径,我的代码如下:
public function postCreate() {
$validator = Validator::make(Input::all() , Product::$rules);
if ($validator->passes()) {
$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');
$image = Input::file('image');
$filename = date('Y-m-d-H:i:s')."-".$image->getClientOriginalName();
Image::make($image->getRealPath())->resize(468, 249)->save('public/img/products'.$filename);
$product->image = 'public/img/products'.$filename;
$product->save();
return Redirect::to('admin/products/index')
->with('message' , 'Product created');
}
return Redirect::to('admin/products/index')->with('message' , 'something went wrong')
->withErrors($validator)->withInput();
}
我只是想尝试关于laravel电子商务网络应用程序的教程。
我想问题是我的目录中没有写入权限,如何在我的目录中添加写入权限。 I.E.公共文件夹,我搜索了几个地方,但我不明白我必须编辑什么?
I.E htaccesss文件还是可以在cmd上进行写入更改?另外我如何检查目录写保护的天气。
PS。我正在使用Windows。我附上了错误的屏幕截图。
谢谢。
答案 0 :(得分:3)
您可能想要更改dateformat,因为Windows不允许文件名中的冒号:
$filename = date('Y-m-d-H:i:s')."-".$image->getClientOriginalName();
并且您可能还想在路径中添加尾部斜杠,以便它不会将文件名连接到文件夹路径:
Image::make($image->getRealPath())->resize(468, 249)->save('public/img/products'.$filename);
答案 1 :(得分:1)
通常,当您还没有将图像存储在公共目录中的目录时,会发生此错误。有时可能是权限问题。
您的img
目录中是否存在public
目录?
要解决此问题,请执行以下步骤:
1。使用命令
$relPath = 'img/'; //your path inside public directory
if (!file_exists(public_path($relPath))) { //Verify if the directory exists
mkdir(public_path($relPath), 666, true); //create it if do not exists
}
或在公共场合手动创建img
目录
2。然后您可以保存图像
Image::make($image)->resize(468, 249)->save(public_path('img/products'.$filename)); //save you image
$product->image = 'img/products'.$filename; //note
$product->save();
注意:请注意,我们不需要在路径中指定public
目录。因为我们使用relative path
,所以img
目录也会在public
目录中创建。
答案 2 :(得分:0)
我替换了以下代码:
Image::make($image->getRealPath())->resize(468, 249)->save('public/img/products'.$filename);
with:
$path = public_path('img/products/'.$filename);
Image::make($image->getRealPath())->resize(468, 249)->save($path);
问题解决了,我不知道为什么public_path有效,但没关系。
答案 3 :(得分:0)
我还建议大家检查 $path
是否存在。像 Jose Seie
使用原生 PHP 检查一样,我建议您考虑内置助手。
这可以通过 File Facade helper 来实现:
File::exists($imagePath) or File::makeDirectory($imagePath, 777, true);
建议您使用 Laravel 内置函数、类和助手来提高应用程序的性能!