2017-06-21 14 views
0

Laravel 5.4で動作するように単純なファイルアップロードを取得できないようです。 S3用の適切な環境変数でファイルシステムを正しく設定しました。私はこのコードを使用してアップロードするファイルを処理する場合:定義されていないメソッドを呼び出すGuzzleHttp Psr7 Uri :: composeComponents()

$disk = Storage::disk('s3'); 
foreach ($request->allFiles() as $file) { 
    $disk->putFileAs('file-requests', $file, $file->getClientOriginalName()); 
} 

私はこのエラーを取得する:

(1/1) FatalThrowableError 
Call to undefined method GuzzleHttp\Psr7\Uri::composeComponents() 
in UriResolver.php (line 102) 
at UriResolver::resolve(object(Uri), object(Uri)) 
in RestSerializer.php (line 206) 
at RestSerializer->buildEndpoint(object(Operation), array('Bucket' => 'myBucket', 'Key' => 'file-requests/test_2MB.dump', 'Body' => object(Stream), 'ACL' => 'private', 'ContentType' => 'text/plain', 'ContentLength' => 2097152, '@http' => array()), array('body' => object(Stream), 'headers' => array('x-amz-acl' => 'private', 'Content-Type' => 'text/plain', 'Content-Length' => 2097152))) 
in RestSerializer.php (line 48) 
at RestSerializer->__invoke(object(Command)) 
in Middleware.php (line 97) 
at Middleware::Aws\{closure}(object(Command), null) 
in Middleware.php (line 81) 
at Middleware::Aws\{closure}(object(Command), null) 
in S3Client.php (line 421) 
at S3Client::Aws\S3\{closure}(object(Command), null) 
in S3Client.php (line 444) 
at S3Client::Aws\S3\{closure}(object(Command), null) 
in S3Client.php (line 378) 
at S3Client::Aws\S3\{closure}(object(Command), null) 
in S3Client.php (line 397) 
at S3Client::Aws\S3\{closure}(object(Command), null) 
in Middleware.php (line 55) 
at Middleware::Aws\{closure}(object(Command), null) 
in SSECMiddleware.php (line 59) 
at SSECMiddleware->__invoke(object(Command), null) 
in IdempotencyTokenMiddleware.php (line 77) 
at IdempotencyTokenMiddleware->__invoke(object(Command)) 
in AwsClientTrait.php (line 65) 
at AwsClient->executeAsync(object(Command)) 
in ObjectUploader.php (line 90) 
at ObjectUploader->promise() 
in S3ClientTrait.php (line 44) 
at S3Client->uploadAsync('myBucket', 'file-requests/test_2MB.dump', resource, 'private', array('params' => array('ContentType' => 'text/plain', 'ContentLength' => 2097152))) 
in S3ClientTrait.php (line 29) 
at S3Client->upload('myBucket', 'file-requests/test_2MB.dump', resource, 'private', array('params' => array('ContentType' => 'text/plain', 'ContentLength' => 2097152))) 
in AwsS3Adapter.php (line 582) 
at AwsS3Adapter->upload('file-requests/test_2MB.dump', resource, object(Config)) 
in AwsS3Adapter.php (line 367) 
at AwsS3Adapter->writeStream('file-requests/test_2MB.dump', resource, object(Config)) 
in Filesystem.php (line 122) 
at Filesystem->putStream('file-requests/test_2MB.dump', resource, object(Config)) 
in FilesystemAdapter.php (line 118) 
at FilesystemAdapter->put('file-requests/test_2MB.dump', resource, array()) 
in FilesystemAdapter.php (line 152) 
at FilesystemAdapter->putFileAs('file-requests/test_2MB.dump', object(UploadedFile), 'test_2MB.dump') 
in FileRequestsController.php (line 373) 
at FileRequestsController->upload(object(Request), object(FileRequest)) 
at call_user_func_array(array(object(FileRequestsController), 'upload'), array(object(Request), 'file_request' => object(FileRequest))) 
in Controller.php (line 55) 
at Controller->callAction('upload', array(object(Request), 'file_request' => object(FileRequest))) 
in ControllerDispatcher.php (line 44) 
at ControllerDispatcher->dispatch(object(Route), object(FileRequestsController), 'upload') 
in Route.php (line 203) 
at Route->runController() 
in Route.php (line 160) 
at Route->run() 
in Router.php (line 574) 
at Router->Illuminate\Routing\{closure}(object(Request)) 
in Pipeline.php (line 30) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in BaseController.php (line 20) 
at BaseController->App\Http\Controllers\{closure}(object(Request), object(Closure)) 
in Pipeline.php (line 131) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in LoginUsingOldPlm.php (line 39) 
at LoginUsingOldPlm->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in SubstituteBindings.php (line 41) 
at SubstituteBindings->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in Authenticate.php (line 43) 
at Authenticate->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in VerifyCsrfToken.php (line 65) 
at VerifyCsrfToken->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in ShareErrorsFromSession.php (line 49) 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in StartSession.php (line 64) 
at StartSession->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in AddQueuedCookiesToResponse.php (line 37) 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in EncryptCookies.php (line 59) 
at EncryptCookies->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in Pipeline.php (line 102) 
at Pipeline->then(object(Closure)) 
in Router.php (line 576) 
at Router->runRouteWithinStack(object(Route), object(Request)) 
in Router.php (line 535) 
at Router->dispatchToRoute(object(Request)) 
in Router.php (line 513) 
at Router->dispatch(object(Request)) 
in Kernel.php (line 174) 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 
in Pipeline.php (line 30) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in TransformsRequest.php (line 30) 
at TransformsRequest->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in TransformsRequest.php (line 30) 
at TransformsRequest->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in ValidatePostSize.php (line 27) 
at ValidatePostSize->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in CheckForMaintenanceMode.php (line 46) 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in Pipeline.php (line 102) 
at Pipeline->then(object(Closure)) 
in Kernel.php (line 149) 
at Kernel->sendRequestThroughRouter(object(Request)) 
in Kernel.php (line 116) 
at Kernel->handle(object(Request)) 
in index.php (line 52) 

が、メソッドが定義されています。たぶん私は何かを見逃しているが、私はそれを見ることができない。どんな助けもありがとうございます。 UriResolver.phpにライン102でこれを追加する:

$_uri = new Uri(); 
var_dump(method_exists($_uri, 'composeComponents')); 
exit; 

を私の新鮮なLaravelにインストールリターン:

/home/vagrant/Code/test-aws/vendor/guzzlehttp/psr7/src/UriResolver.php:103:boolean true 

私の大規模なプロジェクトでは、それは言う:それがないにもかかわらず

/home/vagrant/Code/plm/vendor/guzzlehttp/psr7/src/UriResolver.php:103:boolean false 

を存在する。本当の疑問は、クラスの静的メソッドが存在しないか、または呼び出し不能になることです。

$composeComponents = function ($scheme, $authority, $path, $query, $fragment) { 
    $uri = ''; 

    // weak type checks to also accept null until we can add scalar type hints 
    if ($scheme != '') { 
     $uri .= $scheme . ':'; 
    } 

    if ($authority != ''|| $scheme === 'file') { 
     $uri .= '//' . $authority; 
    } 

    $uri .= $path; 

    if ($query != '') { 
     $uri .= '?' . $query; 
    } 

    if ($fragment != '') { 
     $uri .= '#' . $fragment; 
    } 

    return $uri; 
}; 

//$_uri = new Uri(); 
//var_dump($_uri); 
//var_dump(method_exists($_uri, 'composeComponents')); 
//exit; 

//return new Uri(Uri::composeComponents(
return new Uri($composeComponents(
    $base->getScheme(), 
    $targetAuthority, 
    $targetPath, 
    $targetQuery, 
    $rel->getFragment() 
)); 
+0

laravelのバージョンはこれですか? – claudios

+0

これはLaravel 5.4.29 –

+0

を使用しています。このリンクが役立つかもしれません。https://stackoverflow.com/questions/35236073/fatal-error-call-to-undefined-method-guzzlehttp-clientrequest-with-guzzle-6 – claudios

答えて

0

これはオートローディングの問題でした。

Laravelには、独自のオートローディング機能を備えた古いWebサイトがあります。これは、ミドルウェアが古いWebサイトからのファイルを常に含んでいたために発生し、不規則な動作を引き起こしました。

0

があなたのvendor/ディレクトリを削除し、すべての作曲の依存関係を再インストールしてください:私はAWSに私のファイルのアップロードを完了することができましたが、これは間違っている、すべての種類である変数に移動方法。

"guzzlehttp/guzzle": "~6.2"を使用している場合は問題ありません。

+0

Laravelはhttpを使用します://flysystem.thephpleague.com/adapter/aws-s3-v3/これはAWS PHP SDKを使用し、その作曲家ファイル内で "guzzlehttp/guzzle": "^ 5.3.1 |^6.2.1" –

+0

同じことを意味します。 –

関連する問題