Получение & quot; move_uploaded_file (): не удалось открыть поток: отказано в доступе & quot; ошибка в Laravel

Когда моя форма отправлена, я вижу имя файла, его размер и т. Д., Но не могу загрузить его, потому что в нем говорится, что разрешение отклонено. Я изменил владельца myapp / хранилища на www-data:www-data и сделал

php artisan cache:clear

chmod -R 777 myapp/storage

как предложено здесь: Ошибка «Не удалось открыть поток: отказано в доступе» — Laravel, но это не помогло

Моя форма создана с <form> <input> теги, а не с {{ Form }} элементы, поэтому я загружаю его с move_uploaded_file() и не Input::file()->move(),

Я сделал скриншоты сообщения об ошибке в браузере и терминале с помощью ls -l, но пока не могу опубликовать изображения: /

Исходная форма, которую я хочу отправить, не является формой с действием, методом … Я отправляю ее с помощью ajax, но, поскольку это не сработало, я сделал небольшую форму с двумя входами, чтобы увидеть, что происходит … и она говорит, что разрешение отказано

РЕДАКТИРОВАТЬ 2:
сообщение об ошибке:



Whoops, looks like something went wrong.

1/1
ErrorException in AdminFunkcije.php line 121:
move_uploaded_file(/slika.jpg): failed to open stream: Permission denied
in AdminFunkcije.php line 121
at HandleExceptions->handleError('2', 'move_uploaded_file(/slika.jpg): failed to open stream: Permission denied', '/home/tamara/hexdoo/app/Http/Controllers/AdminFunkcije.php', '121', array('username' => 'lalal', 'size' => '1'))
at move_uploaded_file('/tmp/phpCLtMt3', '/slika.jpg') in AdminFunkcije.php line 121
at AdminFunkcije->dodajKategorije2()
at call_user_func_array(array(object(AdminFunkcije), 'dodajKategorije2'), array()) in Controller.php line 246
at Controller->callAction('dodajKategorije2', array()) in ControllerDispatcher.php line 162
at ControllerDispatcher->call(object(AdminFunkcije), object(Route), 'dodajKategorije2') in ControllerDispatcher.php line 107
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 108
at ControllerDispatcher->callWithinStack(object(AdminFunkcije), object(Route), object(Request), 'dodajKategorije2') in ControllerDispatcher.php line 67
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\AdminFunkcije', 'dodajKategorije2') in Route.php line 198
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 131
at Route->run(object(Request)) in Router.php line 691
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Router.php line 693
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 660
at Router->dispatchToRoute(object(Request)) in Router.php line 618
at Router->dispatch(object(Request)) in Kernel.php line 210
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 111
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53
at require_once('/home/tamara/hexdoo/public/index.php') in server.php line 21


PHP



public function dodajKategorije2() {
if(isset($_POST['username'])) { $username = $_POST['username'];}

echo count($_FILES)."
". print_r($_FILES); if(isset($_FILES['profileImg'])) { $size= intval($_FILES['profileImg']['size'],10); if($size > 10485760) { return "file size: ".$_FILES['profileImg']['size']; } else { move_uploaded_file($_FILES['profileImg']['tmp_name'][0] ,"/slika.jpg"); return "ok"; } } else return "no file "; }

FORM


<form id="data" method="POST" action="admin/dodaj_kategorije" enctype="multipart/form-data">
User Name: <input type="text" name="username" value=""><br />
Profile Image: <input name="profileImg[]" type="file" /><br />
<input type="submit" value="Submit">
</form>

0

Решение

Лучше использовать функцию перемещения для загрузки файла в общую папку. Тогда вам будет проще получить доступ к файлу из любой точки вашего приложения.

//For access the file
$file = $request->file('image');

//Display File Name

echo 'File Name: '.$file->getClientOriginalName();
echo '<br>';

//Display File Extension
echo 'File Extension: '.$file->getClientOriginalExtension();
echo '<br>';

//Display File Real Path
echo 'File Real Path: '.$file->getRealPath();
echo '<br>';

//Display File Size
echo 'File Size: '.$file->getSize();
echo '<br>';

//Display File Mime Type
echo 'File Mime Type: '.$file->getMimeType();

//Move Uploaded File
$destinationPath = 'uploads';
$file->move($destinationPath,$file->getClientOriginalName());

Выше функция перемещения будет загружать файл с его реальным именем (оригинальное имя файла). если вы хотите настроить его, вы можете использовать функцию uniqid () для генерации уникального имени файла,

//Move Uploaded File
$up_name = uniqid();
$destinationPath = 'uploads';
$file->move($destinationPath, $up_name );
1

Другие решения

Я наконец решил проблему.
У меня был www-data: www-data установлен как владелец хранилища папок, но он продолжал говорить

unable to create '/upload' directory

Я установил пункт назначения
'./upload' с точкой «.»

это все еще говорит

file was not uploaded due to an unknown error

но когда я проверил (случайно) файл общей папки был там …

Я не знаю, почему он говорит, что не загружен из-за ошибки, но он загружает файл каждый раз так что для меня это работает с этой точкой.

0

По вопросам рекламы [email protected]