Intereting Posts

Не удается открыть загруженные вложения из API Gmail.

Я чувствую, что мне не хватает чего-то глупого …

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

Что я делаю не так?

// this works; I get the attachment body, etc $data = $g->gmail->users_messages_attachments->get($email_account, $email_message_id, $p->getBody()->getAttachmentId()); $fh = fopen(DOC_ROOT."/file.pdf", "w+"); fwrite($fh, base64_decode($data->data)); fclose($fh); 

Related of "Не удается открыть загруженные вложения из API Gmail."

Возможно, возникла проблема с расшифровкой данных вложения. Попробуйте использовать эту строку вместо данных вложений, прежде чем записывать их в файл.

  $data = $g->gmail->users_messages_attachments->get($email_account, $email_message_id, $p->getBody()->getAttachmentId()); // Converting to standard RFC 4648 base64-encoding // see http://en.wikipedia.org/wiki/Base64#Implementations_and_history $data = strtr($data, array('-' => '+', '_' => '/')); $fh = fopen(DOC_ROOT."/file.pdf", "w+"); fwrite($fh, base64_decode($data->data)); fclose($fh);
$data = $g->gmail->users_messages_attachments->get($email_account, $email_message_id, $p->getBody()->getAttachmentId()); // Converting to standard RFC 4648 base64-encoding // see http://en.wikipedia.org/wiki/Base64#Implementations_and_history $data = strtr($data, array('-' => '+', '_' => '/')); $fh = fopen(DOC_ROOT."/file.pdf", "w+"); fwrite($fh, base64_decode($data->data)); fclose($fh); 

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

Я не очень хорошо разбираюсь в php, но в python это будет равнозначно:

 path = ''.join([store_dir, part['filename']]) f = open(path, 'w') f.write(file_data) f.close() 

Где file_data – это то, что вы расшифровали (ваши $data )

Попробуйте выполнить следующее, чтобы декодировать возвращенные данные вложений перед тем, как записать их в файл.

 $attachment_data = urlsafe_b64decode(utf8_encode($data->data)); 

работал на меня.