FilesystemService.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace App\Services;
  3. use Aws\S3\S3Client;
  4. use Aws\S3\Exception\S3Exception;
  5. use GuzzleHttp\Exception\ConnectException;
  6. use League\Flysystem\AwsS3V3\AwsS3V3Adapter;
  7. use League\Flysystem\Filesystem;
  8. use League\Flysystem\UnableToRetrieveMetadata;
  9. use League\Flysystem\FilesystemException;
  10. use League\Flysystem\UnableToListContents;
  11. use League\Flysystem\FileAttributes;
  12. use League\Flysystem\UnableToWriteFile;
  13. class FilesystemService
  14. {
  15. const VERIFY_FILE_NAME = 'cfstest.txt';
  16. public static function getVerifyCredentials($key, $secret, $region, $bucket, $endpoint)
  17. {
  18. $client = new S3Client([
  19. 'version' => 'latest',
  20. 'region' => $region,
  21. 'endpoint' => $endpoint,
  22. 'credentials' => [
  23. 'key' => $key,
  24. 'secret' => $secret,
  25. ]
  26. ]);
  27. $adapter = new AwsS3V3Adapter(
  28. $client,
  29. $bucket,
  30. );
  31. $throw = false;
  32. $filesystem = new Filesystem($adapter);
  33. $writable = false;
  34. try {
  35. $filesystem->write(self::VERIFY_FILE_NAME, 'ok', []);
  36. $writable = true;
  37. } catch (FilesystemException | UnableToWriteFile $exception) {
  38. $writable = false;
  39. }
  40. if(!$writable) {
  41. return false;
  42. }
  43. try {
  44. $response = $filesystem->read(self::VERIFY_FILE_NAME);
  45. if($response === 'ok') {
  46. $writable = true;
  47. $res[] = self::VERIFY_FILE_NAME;
  48. } else {
  49. $writable = false;
  50. }
  51. } catch (FilesystemException | UnableToReadFile $exception) {
  52. $writable = false;
  53. }
  54. if(in_array(self::VERIFY_FILE_NAME, $res)) {
  55. try {
  56. $filesystem->delete(self::VERIFY_FILE_NAME);
  57. } catch (FilesystemException | UnableToDeleteFile $exception) {
  58. $writable = false;
  59. }
  60. }
  61. if(!$writable) {
  62. return false;
  63. }
  64. if(in_array(self::VERIFY_FILE_NAME, $res)) {
  65. return true;
  66. }
  67. return false;
  68. }
  69. }