【发布时间】:2018-01-18 23:25:46
【问题描述】:
我有一个项目托管在 Blue Host 中的共享服务器上,并且在 AdminPostController 的存储和更新方法中我有一个将图像保存在 public_path 中的功能,但是在尝试保存它时会产生以下错误:
Intervention\Image\Exception\NotWritableException
Can't write image data to path (/home4/directoryname/public/directoryname/uploads/posts/1516313973.jpg)
这是我的存储方法:
public function store(Request $request)
{
$posts = new Post();
$posts->title = $request->input('title');
$posts->slug = str_slug($request->get('title'));
$posts->content = $request->input('content');
$posts->category_id = $request->input('category_id');
$posts->user_id = $request->input('user_id');
$posts->blockquote = $request->input('blockquote');
$posts->blockquote_sign = $request->input('blockquote_sign');
$posts->save();
// Handle the client upload image id avatar
if($request->hasFile('avatar')){
$avatar = $request->file('avatar');
$filename = time() . '.' . $avatar->getClientOriginalExtension();
Image::make($avatar)->resize(500, 300)->save( public_path('uploads/posts/' . $filename ) );
$posts->avatar = $filename;
$posts->save();
}
return redirect()->route('contenido.index')
->with('success','Publicación creada correctamente!!!');
}
这是我的更新方法:
public function update(Request $request, $id)
{
$updated = Post::findorFail($id);
$post = $request->all();
$updated->fill($post)->save();
if($request->hasFile('avatar')){
$avatar = $request->file('avatar');
$filename = time() . '.' . $avatar->getClientOriginalExtension();
Image::make($avatar)->resize(500, 300)->save( public_path('uploads/posts/' . $filename ) );
$updated->avatar = $filename;
$updated->save();
}
return redirect()->route('contenido.index')
->with('success','Publicación actualizada correctamente!!!');
}
这是这些方法的路线资源:
Route::resource('contenido', 'Admin\AdminPostController');
我正在阅读不同的地方,目前我还没有找到解决方案,有人可以指导我吗?。
这就是服务器上文件的结构。
【问题讨论】:
-
您是否检查过您要写入的路径的读写权限?此外,您不应将用户上传的内容存储在公共目录中,而是创建指向存储的符号链接。
-
晚上好,感谢您的回答。是的,我已授权 775 和 777 进行测试,但错误仍然存在。
-
Laravel 有一个辅助方法来存储上传,你可以试试。在此处查看文档:laravel.com/docs/5.5/filesystem#file-uploads
-
我尝试使用 storage_path 方法,它对我有用,但它会将文件发送到一个名为 storage 的目录,Laravel 在该目录中注册日志和其他框架功能。
-
是的,这是存储文件的正确位置。您要做的是从 public/ 中创建一个符号链接到 storage/ 中的上传目录
标签: php laravel laravel-5.4 laravel-5.5 bluehost