У меня есть проект, размещенный на общем сервере в 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 по умолчанию использует общую папку в качестве домашнего каталога, в то время как мой сервер использует другой. Поэтому я установил альтернативный домашний каталог.
Мне просто нужно было выполнить следующие действия:
1 — Отредактируйте файл index.php, расположенный в общей папке вашего проекта Laravel 5.
2 — Найти следующую строку:
$app = require_once __DIR__.'/../bootstrap/app.php';
3 — Под этой строкой добавьте следующие строки:
$app->bind('path.public', function() {
return __DIR__;
});
4 — Теперь переименуйте публичный каталог вашего проекта в public_html.
Приведенное выше редактирование вашего файла index.php заставит ваш проект Laravel использовать непосредственный родительский каталог этого файла в качестве общедоступного каталога для вашего проекта.
Вы можете найти больше в этой публикации:
https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
Других решений пока нет …