我无法将图像上传到共享服务器 Laravel 5.5 中的 public 路径
I can not upload images to the public path in Shared Server Laravel 5.5
我在 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');
我正在阅读不同的地方,目前我还没有找到解决方案,有人可以指导我吗?
这是服务器上文件的结构。
Laravel 5 默认使用 public 文件夹作为主目录,而我的服务器使用另一个。因此,我设置了一个备用主目录。
我只需要执行以下操作:
1 - 编辑位于 Laravel 5 项目的 public 文件夹中的 index.php。
2 - 找到以下行:
$app = require_once __DIR__.'/../bootstrap/app.php';
3 - 在该行下方添加以下行:
$app->bind('path.public', function() {
return __DIR__;
});
4 - 现在将项目的 public 目录重命名为 public_html。
以上对 index.php 文件的编辑将指示您的 Laravel 项目使用此文件的直接父目录作为项目的 public 目录。
您可以在此 publication 中找到更多信息:
https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
我在 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');
我正在阅读不同的地方,目前我还没有找到解决方案,有人可以指导我吗?
这是服务器上文件的结构。
Laravel 5 默认使用 public 文件夹作为主目录,而我的服务器使用另一个。因此,我设置了一个备用主目录。
我只需要执行以下操作:
1 - 编辑位于 Laravel 5 项目的 public 文件夹中的 index.php。
2 - 找到以下行:
$app = require_once __DIR__.'/../bootstrap/app.php';
3 - 在该行下方添加以下行:
$app->bind('path.public', function() {
return __DIR__;
});
4 - 现在将项目的 public 目录重命名为 public_html。
以上对 index.php 文件的编辑将指示您的 Laravel 项目使用此文件的直接父目录作为项目的 public 目录。
您可以在此 publication 中找到更多信息: https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5