无法将图像数据写入laravel中的路径

时间:2015-03-31 12:47:31

标签: laravel-4

我和这个家伙有同样的错误:

Another thread

基本上我的错误是将图像上传到特定路径,我的代码如下:

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。我附上了错误的屏幕截图。

error

谢谢。

4 个答案:

答案 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 内置函数、类和助手来提高应用程序的性能!