上传图像在本地主机上运行完美,赢得';t在实时网站上工作(谷歌应用程序引擎和laravel)

上传图像在本地主机上运行完美,赢得';t在实时网站上工作(谷歌应用程序引擎和laravel),laravel,google-app-engine,Laravel,Google App Engine,我的项目在本地主机上运行良好,只要我使用命令gcloud-app-deploy将其部署到实时服务器上,它就可以正常工作。部署可能会成功运行,当我尝试在live站点上上载图像时,它会抛出错误500,当我检查日志时,我发现以下错误: ErrorException: mkdir(): Permission denied at mkdir (/app/app/Http/Controllers/Admin/Service/AddServiceController.php:74) at App\Http\C

我的项目在本地主机上运行良好,只要我使用命令
gcloud-app-deploy
将其部署到实时服务器上,它就可以正常工作。部署可能会成功运行,当我尝试在live站点上上载图像时,它会抛出错误500,当我检查日志时,我发现以下错误:

ErrorException: mkdir(): Permission denied
at mkdir (/app/app/Http/Controllers/Admin/Service/AddServiceController.php:74)
at App\Http\Controllers\admin\Service\AddServiceController->store (/app/app/Http/Controllers/Admin/Service/AddServiceController.php:74)
at call_user_func_array ([internal function])
at Illuminate\Routing\Controller->callAction (/app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54)
at Illuminate\Routing\ControllerDispatcher->dispatch (/app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45)
at Illuminate\Routing\Route->runController (/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:225)
at Illuminate\Routing\Route->run (/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:182)
at Illuminate\Routing\Router->Illuminate\Routing\{closure} (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:681)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128)
at Illuminate\Auth\Middleware\Authorize->handle (/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php:45)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at App\Http\Middleware\LastUserActivity->handle (/app/app/Http/Middleware/LastUserActivity.php:26)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Routing\Middleware\SubstituteBindings->handle (/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:76)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\View\Middleware\ShareErrorsFromSession->handle (/app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Session\Middleware\StartSession->handle (/app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:56)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle (/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Cookie\Middleware\EncryptCookies->handle (/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:66)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Pipeline\Pipeline->then (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103)
at Illuminate\Routing\Router->runRouteWithinStack (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:683)
at Illuminate\Routing\Router->runRoute (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:658)
at Illuminate\Routing\Router->dispatchToRoute (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:624)
at Illuminate\Routing\Router->dispatch (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:613)
at Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure} (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:165)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128)
at Illuminate\Foundation\Http\Middleware\TransformsRequest->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\TransformsRequest->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:63)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Fruitcake\Cors\HandleCors->handle (/app/vendor/fruitcake/laravel-cors/src/HandleCors.php:36)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Fideloper\Proxy\TrustProxies->handle (/app/vendor/fideloper/proxy/src/TrustProxies.php:57)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Pipeline\Pipeline->then (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103)
at Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:140)
at Illuminate\Foundation\Http\Kernel->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:109)
at {main} (/app/public/index.php:55)
第二个错误消息:

Intervention\Image\Exception\NotWritableException: Can't write image data to path (/app/public/uploads/services/1593957045.jpeg)
at App\Http\Controllers\admin\Service\AddServiceController->store (/app/vendor/intervention/image/src/Intervention/Image/Image.php:150)
at call_user_func_array ([internal function])
at Illuminate\Routing\Controller->callAction (/app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54)
at Illuminate\Routing\ControllerDispatcher->dispatch (/app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45)
at Illuminate\Routing\Route->runController (/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:225)
at Illuminate\Routing\Route->run (/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:182)
at Illuminate\Routing\Router->Illuminate\Routing\{closure} (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:681)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128)
at Illuminate\Auth\Middleware\Authorize->handle (/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php:45)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at App\Http\Middleware\LastUserActivity->handle (/app/app/Http/Middleware/LastUserActivity.php:26)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Routing\Middleware\SubstituteBindings->handle (/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:76)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\View\Middleware\ShareErrorsFromSession->handle (/app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Session\Middleware\StartSession->handle (/app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:56)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle (/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Cookie\Middleware\EncryptCookies->handle (/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:66)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Pipeline\Pipeline->then (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103)
at Illuminate\Routing\Router->runRouteWithinStack (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:683)
at Illuminate\Routing\Router->runRoute (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:658)
at Illuminate\Routing\Router->dispatchToRoute (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:624)
at Illuminate\Routing\Router->dispatch (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:613)
at Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure} (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:165)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128)
at Illuminate\Foundation\Http\Middleware\TransformsRequest->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\TransformsRequest->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:63)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Fruitcake\Cors\HandleCors->handle (/app/vendor/fruitcake/laravel-cors/src/HandleCors.php:36)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Fideloper\Proxy\TrustProxies->handle (/app/vendor/fideloper/proxy/src/TrustProxies.php:57)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Pipeline\Pipeline->then (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103)
at Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:140)
at Illuminate\Foundation\Http\Kernel->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:109)
at {main} (/app/public/index.php:55)
我的控制器:

        $service = new Add_Service;
        // Handle the user upload of avatar
        if($request->hasFile('service')){
            $image = $request->file('service');
            $filename = time().'.'.$image->getClientOriginalExtension();

            $destinationPath = 'uploads/services/';
            if (!file_exists(storage_path($destinationPath))) {
                mkdir(storage_path($destinationPath), 755, true);
            }

            Image::make($image->getRealPath())->resize(1000, 667, function ($constraint) {
                $constraint->aspectRatio();
            })->save($destinationPath.$filename);

            $service->image = $filename;
            $service->service_name = ucfirst(request('service_name'));
            $service->desc = ucfirst(request('service_desc'));
            $service->save();
         }
我的作曲家:

       "post-install-cmd": [
            "chmod -R 755 bootstrap\/cache",
            "php artisan cache:clear"
        ]

请帮忙。我不确定我在这里做错了什么。

更改您的
/app/public/uploads
目录的权限(如注释中提到的@STA)将修复此问题,您可以在Cloud Shell中使用以下命令:

sudo chmod -R a+w <directory>
sudo chmod-R a+w
然而,这可能不是一个永久的解决方案,也不是使用AppEngine的最佳实践,因为AppEngine运行在它上面的结构

如您所见:

App Engine是一个托管VM,这意味着即使您使文件夹在实例上可写,如果App Engine扩展或必须销毁您修改的实例,您也需要在新实例上进行更改

因此,如果您使用此文件夹存储临时文件,我建议您:

  • 开始使用不同的目录来存储它,比如/tmp——使用这种方法,您还将面临前面提到的扩展问题,但是对于临时文件,它将满足您的需要

  • 使用云存储桶存储可供所有实例使用的持久文件。这是缩放应用程序的理想解决方案。您可以通过以下内容找到有关如何创建此应用程序的更多详细信息,并可以获得一个关于如何将文件从云存储上传到PHP应用程序的示例


希望这有帮助。

这是您的
/app/public/uploads
目录上的权限问题。只要更改许可证我怎么更改