Google Drive SDK (клиентская библиотека PHP) - файл загружается, но не читается в пользовательском интерфейсе Google Диска.

Вот мой код для загрузки файла:

private function addFile(File $file, $folderProject, User $user) {

    $fileToUpload = new Google_DriveFile();
    $fileToUpload->setTitle($file->getName());

    //set mime type
    $fileToUpload->setMimeType($file->getMimeType());

    //build parent and set id
    $parent = new Google_ParentReference();
    $parent->setId($folderProject->getId());

    //set parent to file
    $fileToUpload->setParents(array($parent));

    $data = file_get_contents($file->getPath());

    $createdFile = $this->service->files->insert($fileToUpload, array(
            'data' => $data,
            'mimeType' => $file->getMimeType(),
    ));

}

Когда я загружаю, например, docx, используя этот PHP-код, файл добавляется так, чтобы его нельзя было прочитать на веб-сайте Google Drive (он показывает XML-структуру docx), и он отображается в моей папке Google Drive следующим образом:

нечитаемый

И когда я пытаюсь загрузить docx напрямую через пользовательский интерфейс Google Диска, он выглядит следующим образом (что я хочу): readable

Я почти уверен, что проблема связана с тем, что пользовательский интерфейс Google Диска пытается открыть файл другим способом, потому что я загрузил его через свое приложение, но я этого не хочу :)

(у меня такая же проблема с другими файлами)


Я попытался установить параметр 'convert' = true в массиве, но при загрузке у меня возникла ошибка:

..convert = true & uploadType = multipart & key = AI39si49a86oqv9fhb9yzXp7FCWL-cSqwFiClHZ‌ qS3Y3r9Hw8ujtSNlZEWZyFKBp_id7LUyFaZTJ97pMeb0XJHz (500) Internal

Документация: https://developers.google.com/drive/v2/reference/files/insert

=> Но в любом случае я не думаю, что преобразование - правильное решение, я просто хочу иметь возможность видеть контент, как если бы я загрузил файл через пользовательский интерфейс Google Диска


Если я открою docx из папок Google Drive Sync, отредактирую и сохраню его, я смогу увидеть его через пользовательский интерфейс Google Диска (отображается с логотипом W)


person Jerome Ansia    schedule 08.08.2012    source источник
comment
Преобразован ли файл, загруженный через пользовательский интерфейс Google Диска, в документы Google? Я спрашиваю, потому что у меня нет файла .docx, чтобы проверить это, но если это так, вы можете воспроизвести это, указав параметр запроса convert=true с вашим запросом на вставку: добавьте 'convert' => TRUE в array.   -  person Alain    schedule 08.08.2012
comment
Mh нет, тогда у меня возникла эта ошибка: Ошибка при вызове POST ... convert = true & uploadType = multipart & key = AI39si49a86oqv9fhb9yzXp7FCWL-cSqwFiClHZqS3Y3r9Hw8ujtSNlZEWZyFKBp_id7LUyFaZTJ97 Приложение для Windows (для синхронизации папок), я имею в виду, что это все еще .docx, но вы можете прочитать его через пользовательский интерфейс Google Диска;)   -  person Jerome Ansia    schedule 08.08.2012
comment
@Alain Это может быть ошибка?   -  person Jerome Ansia    schedule 09.08.2012


Ответы (1)


У меня такая же проблема.

Но разница в том, что я загружаю pdf и могу просматривать pdf в пользовательском интерфейсе Google Drive.

Мне нужно автоматически преобразовать его в формат google doc с помощью кода api после добавления нового pdf.

Если я изменю $ mimeType = 'application / vnd.google-apps.document'; затем возникла ошибка ниже
https://www.googleapis.com/upload/drive/v2/files?convert=true&uploadType=multipart: (400) Неверный запрос

если я добавлю необязательный параметр

$createdFile = $service->files->insert($file, array(
  'data' => $data,
  'mimeType' => $mimeType,
'convert' => TRUE
));

Тогда никаких изменений, только загрузка pdf без преобразования.

есть ли у вас какие-либо предложения, где мне нужно точно добавить параметр преобразования?

person user1928073    schedule 28.12.2012