无法在laravel 5中

时间:2015-07-05 09:18:38

标签: php laravel laravel-5

我正在尝试在Laravel 5中上传图片。

我的环境是Windows。 我正在使用php artisan serve来运行Laravel。

错误:

NotWritableException in Image.php line 143:
Can't write image data to path (D:\WORK\WebSite\iStore\public\assets/images/products/2015-07-05-08:52:33-6aa3df83gw1dtd5qki2oij.jpg)

控制器:

$image = Input::file('image');
$filename = date('Y-m-d-H:i:s') . "-" . $image->getClientOriginalName();
$path = public_path('assets/images/products/' . $filename);

// echo dd(is_writable(public_path('assets/images/products')));

Image::make($image->getRealPath())-> resize(200, 200)-> save($path);

$product->image = 'assets/images/products/' . $filename;

我使用dd(is_writable())来检查权限,这是真的。 我也试试 chmod 777 public/assets/images/products

查看:

{!! Form::open(array('url' => 'admin/product/update', 'class' => '', 'files' => true)) !!}
<div class="form-group">
{!! Form::Label('image', 'Product Image', array('sr-only')) !!}
<div>
{!! HTML::image($product->image, $product->title, array('class' => 'img-rounded', 'height' => '200')) !!}
</div>
<hr/>
{!! Form::file('image', array('class' => 'form-group')) !!}
</div>
{!! Form::close() !!}

我该怎么处理这个错误?

2 个答案:

答案 0 :(得分:1)

确保您提到的文件夹,即assets/images/products/存在并且具有可写权限

确保您拥有一个好的文件名,即它不应包含:符号

所以你应该像这样改变你的代码

$image = Input::file('image');
$filename = date('Y-m-d-H-i-s')."-". $image->getClientOriginalName();
$path = public_path('assets/images/products/'.$filename);
Image::make($image->getRealPath())-> resize(200, 200)-> save($path);

答案 1 :(得分:0)

您的问题可能在于您在文件名中使用保留字符。在Windows中,您不能在文件名中使用冒号:。所以你可能想用破折号或其他东西替换冒号,也许是这样:

$filename = date('Y-m-d_H-i-s') . "-" . $image->getClientOriginalName();

如果此处不需要可读性,并且您使用日期和时间创建唯一文件名,则可以在文件名前加上UNIX时间戳:

$filename = time() . "-" . $image->getClientOriginalName();

您可能需要阅读MSDN上的Naming Files, Paths, and Namespaces文档,了解有关该主题的更多信息。