2015-04-03 4 views
1

Я пытаюсь синхронизировать файлы между Amazon S3 и Google Диском со службой.Google Drive API PHP возвращает удаленные файлы

Я создал учетную запись службы и поделился папкой с ее адресом электронной почты. Затем с помощью автоматизированной службы, которую я создал, я создал несколько папок.

Все было в порядке, пока я не попытался удалить эти папки из пользовательского интерфейса Google Диска. Они исчезли из пользовательского интерфейса, но мое обслуживание все еще получает их, как если бы они присутствовали. Вот код, я использую, чтобы перечислить файлы/папки:

private function retrieveAllGoogleDriveFiles($service) { 
    $result = array(); 
    $pageToken = NULL; 
    do { 
     try { 
      $parameters = array(); 
      if ($pageToken) { 
       $parameters['pageToken'] = $pageToken; 
      } 
      $parameters['q'] = "trashed=false"; 
      $files = $service->files->listFiles($parameters); 

      $result = array_merge($result, $files->getItems()); 
      $pageToken = $files->getNextPageToken(); 
     } catch (Exception $e) { 
      print "An error occurred: " . $e->getMessage(); 
      $pageToken = NULL; 
     } 
    } while ($pageToken); 
    return $result; 
} 

Вот механизм авторизации Я использую:

 $credentials = new Google_Auth_AssertionCredentials(
      '[email protected]m', 
      array('https://www.googleapis.com/auth/drive'), 
      $private_key, 
      'notasecret',         
      'http://oauth.net/grant_type/jwt/1.0/bearer' 
     ); 

     $googleClient = new Google_Client(); 
     $googleClient->setAssertionCredentials($credentials); 
     if ($googleClient->getAuth()->isAccessTokenExpired()) { 
      $googleClient->getAuth()->refreshTokenWithAssertion(); 
     } 

     $googleService = new Google_Service_Drive($googleClient); 
     $files_list = $this->retrieveAllGoogleDriveFiles($googleService); 

Случай, когда пользователь удаляет файл/папку из Google Drive для меня реальна, и я должен сделать синхронизацию обратно на S3 и удалить там файл/папку.

Заранее спасибо.

ответ

0

Когда папка распределяется между несколькими пользователями, это владелец, у которого есть возможность удалить папку, а не других пользователей.

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

Одно из возможных решений Решение состоит в том, чтобы сделать владельца изменения, поэтому учетная запись, не относящаяся к услугам, принадлежит файлу. В этом случае удалить действительно будет операция сортировки/удаления. Однако, не понимая, что ваш прецедент/основная проблема для решения, трудно решить проблемы. Некоторые из этих вещей могут быть более легкими, если пользователи являются учетными записями предприятия/работы, а не частными/личными учетными записями.

+0

OK, так есть способ удалить файлы из пользовательского интерфейса (как реального пользователя Gmail, а не сервисного)? Или как я могу узнать, удалил ли пользователь его (отменил подписку), так как для меня это должно означать, что он был удален? – Vlado

+1

Возможно, вам захочется пересмотреть, является ли учетная запись службы лучшим приемом. Если конечная точка синхронизации является реальной учетной записью Google, вам может быть лучше, чем OAuthing, как эта учетная запись, а не использовать учетную запись службы в качестве посредника. – pinoyyid

Смежные вопросы