freyo / flysystem-qcloud-cos-v5

💾 Flysystem Adapter for Tencent Cloud COS V5
https://intl.cloud.tencent.com/product/cos?lang=en
MIT License
156 stars 23 forks source link

你好,$disk->put('avatars/1', $fileContents); 调用后会返回false,请问这是什么问题呢? #45

Closed nottellyou closed 3 years ago

nottellyou commented 3 years ago

你好,$disk->put('avatars/1', $fileContents); 调用后会返回false,请问这是什么问题呢?

freyo commented 3 years ago

一般是配置错误或权限不足。可以单独运行以下代码验证。

$adapter = app('filesystem')->disk('cosv5')->getAdapter();
$client = $adapter->getCOSClient();
$client->upload(
  $adapter->getBucketWithAppId(),
  'avatar/1',
  'content'
);
nottellyou commented 3 years ago

或者有没有什么办法可以打印出日志?当前查到这一步返回false后,就查不下去了。vendor里的代码又修改不了。

nottellyou commented 3 years ago

我在本地上传成功了,到了服务器就只能得到false结果,而且服务器也能从cos上通过curl命令取得图片并保存在服务器上。

现在一点头绪都没有,希望能在这里看到一丝线索。

freyo commented 3 years ago

我在本地上传成功了,到了服务器就只能得到false结果,而且服务器也能从cos上通过curl命令取得图片并保存在服务器上。

现在一点头绪都没有,希望能在这里看到一丝线索。

在服务器上运行上述代码再测试下

nottellyou commented 3 years ago

你好,在服务器上运行结果如下:

`Qcloud\Cos\Exception\ServiceResponseException: Access Denied. in file /app/vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ExceptionMiddleware.php on line 61

0 /app/vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ExceptionMiddleware.php(57): Qcloud\Cos\ExceptionMiddleware->createException()

1 /app/vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ExceptionMiddleware.php(36): Qcloud\Cos\ExceptionMiddleware->handle()

2 /app/vendor/guzzlehttp/promises/src/Promise.php(204): Qcloud\Cos\ExceptionMiddleware->Qcloud\Cos{closure}()

3 /app/vendor/guzzlehttp/promises/src/Promise.php(164): GuzzleHttp\Promise\Promise::callHandler()

4 /app/vendor/guzzlehttp/promises/src/FulfilledPromise.php(41): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise{closure}()

5 /app/vendor/guzzlehttp/promises/src/TaskQueue.php(48): GuzzleHttp\Promise\FulfilledPromise::GuzzleHttp\Promise{closure}()

6 /app/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(158): GuzzleHttp\Promise\TaskQueue->run()

7 /app/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(183): GuzzleHttp\Handler\CurlMultiHandler->tick()

8 /app/vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\Handler\CurlMultiHandler->execute()

9 /app/vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\Promise\Promise->invokeWaitFn()

10 /app/vendor/guzzlehttp/promises/src/Promise.php(269): GuzzleHttp\Promise\Promise->waitIfPending()

11 /app/vendor/guzzlehttp/promises/src/Promise.php(226): GuzzleHttp\Promise\Promise->invokeWaitList()

12 /app/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending()

13 /app/vendor/guzzlehttp/promises/src/Coroutine.php(67): GuzzleHttp\Promise\Promise->wait()

14 /app/vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\Promise\Coroutine->GuzzleHttp\Promise{closure}()

15 /app/vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\Promise\Promise->invokeWaitFn()

16 /app/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending()

17 /app/vendor/guzzlehttp/promises/src/Coroutine.php(103): GuzzleHttp\Promise\Promise->wait()

18 /app/vendor/guzzlehttp/command/src/ServiceClient.php(77): GuzzleHttp\Promise\Coroutine->wait()

19 /app/vendor/guzzlehttp/command/src/ServiceClient.php(153): GuzzleHttp\Command\ServiceClient->execute()

20 /app/vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Client.php(174): GuzzleHttp\Command\ServiceClient->__call()

21 /app/vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Client.php(222): Qcloud\Cos\Client->__call()

22 /app/app/Http/Controllers/Manage/ActivityController.php(308): Qcloud\Cos\Client->upload()

23 /app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\Manage\TestController->tmpupload()`

能否帮忙看看是什么原因导致的?

freyo commented 3 years ago

AccessDenied 签名或者权限不正确,拒绝访问。

先检查下 config/filesystems.php 配置文件是否正确;

再在服务器上运行 php artisan tinker 打印 config('filesystems') 看看运行时配置是否正确;

配置确认无误的话,核对下密钥是否正确。

如果是子账户密钥需要配置好相关权限。详细参见 https://cloud.tencent.com/document/product/436/56637#cos-.E6.8A.A5.E9.94.99-accessdenied.EF.BC.8C.E8.AF.A5.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F

nottellyou commented 3 years ago

你好,换成你的代码后,确实可以上传文件了,但在服务器上最大只能上传15K的文件,超过这个限制,就无法上传了。本地一切正常。

nottellyou commented 3 years ago

感谢@freyo的支持,基本上已经确定是nginx配置的问题了。