Google_Service_Exception: fieldNotWritable при загрузке новой версии файла на Google Диск

Я хочу загрузить новую версию файла, которая уже доступна на Google Диске.

Я начал с примера PHP на https://developers.google.com/drive/v2/reference/files/update.

function updateFile($fileID, $uploadFile) {
    try {
        $file = $this->service->files->get($fileID);

        $content = file_get_contents($uploadFile);
        $file = $this->service->files->update($fileID, $file, array(
            'data' => $content,
        ));
        printf("Updated File ID: %s\n", $file->getId());
    } catch (Exception $e) {
        echo get_class($e), ': ', $e->getMessage(), PHP_EOL;
    }
}

В результате я получаю

Google_Service_Exception: {
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "fieldNotWritable",
    "message": "The resource body includes fields which are not directly writable."
   }
  ],
  "code": 403,
  "message": "The resource body includes fields which are not directly writable."
 }
}

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

Есть идеи что не так?

1 ответ

Посмотрите на $file объект, возвращенный $file = $this->service->files->get($fileID), Я предполагаю, что он содержит набор полей, которые не определены как доступные для записи по адресу https://developers.google.com/drive/v3/reference/files

Поэтому, когда вы отправляете тот же объект $file на диск в $file = $this->service->files->update($fileID, $file,Драйв возражает против их присутствия. Поскольку вы только обновляете контент, вы можете отправить пустой объект метаданных вместо $file.

Кроме того, как отметил Сиава, быстрый запуск, который вы выполняете, помечен как v2, но если вы используете последнюю библиотеку PHP, она, вероятно, изменилась на v3. Независимо от того, влияет ли это на быстрый запуск, можно только догадываться.

Другие вопросы по тегам