如何使用PHP下载google drive文件内容并保存为相应的文件格式

如何使用PHP下载google drive文件内容并保存为相应的文件格式,php,file,google-drive-api,Php,File,Google Drive Api,我正在开发一个GoogleDrive应用程序,在那里我需要下载内容并使用PHPAPI将内容写入相应的格式(例如:word、Excel或ppt)。请注意,文件不是本机格式,因此不会有下载Url。我正在使用导出链接下载内容。我正在创建谷歌硬盘文档、工作表和幻灯片格式的文件 下面是我的代码 $file = $service->files->get($fileId); $downloadUrl = $file['exportLinks']['application/v

我正在开发一个GoogleDrive应用程序,在那里我需要下载内容并使用PHPAPI将内容写入相应的格式(例如:word、Excel或ppt)。请注意,文件不是本机格式,因此不会有下载Url。我正在使用导出链接下载内容。我正在创建谷歌硬盘文档、工作表和幻灯片格式的文件

下面是我的代码

$file = $service->files->get($fileId);            
$downloadUrl = $file['exportLinks']['application/vnd.openxmlformats-officedocument.wordprocessingml.document'];
if ($downloadUrl) {
  $request = new Google_HttpRequest($downloadUrl, 'GET', null, null);
  $httpRequest = Google_Client::$io->authenticatedRequest($request);              
  if ($httpRequest->getResponseHttpCode() == 200) {   
      $response = $httpRequest->getResponseBody();
  } else {
    // An error occurred.
    return null;
  }
} else {
  return null;
}
一切都在工作,我得到的回应也如下

Google_HttpRequest Object
(
    [batchHeaders:Google_HttpRequest:private] => Array
        (
            [Content-Type] => application/http
            [Content-Transfer-Encoding] => binary
            [MIME-Version] => 1.0
            [Content-Length] => 
        )

    [url:protected] => https://docs.google.com/feeds/download/documents/export/Export?id=1aKI7o3g-eLNuLV7dAc-gS5oakhkwl3dLfVPaBBJX0Y4&exportFormat=docx
    [requestMethod:protected] => GET
    [requestHeaders:protected] => Array
        (
            [authorization] => Bearer ya29.IAHncRF0XeCjbX967QqIOb3IDVfowGgmmSC6SDssBW1yFXdfX4MlxbcqOB21CRW1HmVtyqMfC1QzgQ
        )

    [postBody:protected] => 
    [userAgent:protected] => google-api-php-client/0.6.5
    [responseHttpCode:protected] => 200
    [responseHeaders:protected] => Array
        (
            [content-type] => application/vnd.openxmlformats-officedocument.wordprocessingml.document; charset=utf-8
            [x-robots-tag] => noarchive
            [content-disposition] => attachment;filename="asd.docx"
            [set-cookie] => NID=67=W-YZgqChz2SoodlmbjJDk9WpVdCFMg9Z-mX2KgBxZrYyUUix0aXfKtVMnwZm6XQ4UOZG7NpHEC6XRwbMgTft4nAMQFQHUV4Z-9L1dEWkSlmKIoJLJhyyGhVQeh0r20Vz;Domain=.google.com;Path=/;Expires=Sat, 22-Aug-2015 07:36:01 GMT;HttpOnly
            [p3p] => CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
            [date] => Fri, 20 Feb 2015 07:36:01 GMT
            [expires] => Fri, 20 Feb 2015 07:36:01 GMT
            [cache-control] => private, max-age=0
            [x-content-type-options] => nosniff
            [x-frame-options] => SAMEORIGIN
            [x-xss-protection] => 1; mode=block
            [server] => GSE
            [transfer-encoding] => chunked
            [alternate-protocol] => 443:quic,p=0.08
        )

    [responseBody:protected] => PK€¼SFdocProps/app.xmlÁ
Â0D¿À¹kªI[Ñ«õ’m
´»!»Šþ½A={Þð˜±í}Ô
2GÂZÏg•V€žBľ֧ãnºÒŠÅap!Ôú¬Ûfb™d‰Àªk}IkcØ_`t<+é(NJ̽¡®‹¶ä¯# ˜EU-
Ü0@˜¦P¿ë›ü+
ä_ûø||¤âkì&¥!z'åd³'êP¥ÃÖük¾§š'PKoð„¬PK€¼SFdocProps/core.xmlmÏJÄ@‡ŸÀw(soÓ® RÚîÍ“‚
^‡LìÛùÃ$ÚîÛ;[´
î1ù}ùHÒí7Ÿ”Øß«¦ªUAƒ±~ìÕëËCy¯
íž‚§^‰Õ~¸é0¶=¥)‰%.²Ès‹±WG‘Ø0Éi®2ásø’Ó’Ë4BÔxÒ#Á®®ïÀ‘h£EÃEXÆͨ¾•7eüHÓ*04‘#/MÕÀ/+”_X“?¤³rŽtý    7za»ó¯§–Ö_^…¤†Î`+V&4›Ê\:ØZüûÞðPK}Š·–â‰PK€¼SFword/numbering.xml¥’Anƒ0EOÐ; ïHU…B³hÔnºk{€‰1`ÅöXcÍíë„-•*JWÆÿýïáowZE 'Ñdl³NX$Ç\š2cïoO«{9&…Fdì$Û=ÜlÛÔÔú (œ‹Â¸TóŒUÞÛ4Ž¯„·F+LH|x¥2Ö@ÇÚ®8j^¤’þß&É»b0c5™ôŠXiÉ  þ,I±($×G¯ 9¾d¼ÖÂø‹cLB…h\%­ëiz)-«Òüv‰F«þ\kç¸åmسVQ‹”[B.œ_÷Ýp n’<#Åœß=û$¤0çvL@ƒ÷:x_—vAwáÔœ ÝèEèô3,ØçW½•³ZüRk ]m'µ/·RI¿ï“äuÌXM&í-9¡ÃÂ$)…ä¢ûô
ã{’¬×ZtŒI¨ÐWIëzš¾•ŠUi~;D£U¿¯µcÜr‚6Ü…V'£)·„\8VW§â@œ%#x@Š1-üôì;Ñ Í€9$ã4xOƒw7´#ê|ó,œÓÈ©ô&·´¿în˜çw½•£R|A*_ÓÈ[¼ò=@ÝBPÈw"ÓÀæ¼çR.¡$Ðçº?Ýì,¹ˆËº+δò´WÂÚ²E÷úDmj@‡èmHlëÀóÑûšÅWå'’ ëq÷j-¾PK-ldv÷PK€¼SFword/styles.xmlíWíNÛ0}‚½C”ÿ¦”lª(¨±MblÝ8ŽÓxulËvZº§ŸoLY“R4ÆÚ?é½ö=××çøÆ9»¸O‰³DBbF'®íÃöéí¿Êvbƒ>Äb_‚Xìôï×݉žaUÜÅ·±\L|ïû³ëÕHä…¾ÉGÏÿ&ZwY¨ºŠ°žû/éÐ\äÿ;%úÏUâ-Ø—«òü7PKå 7.bPK€¼SFword/document.xmlíXKnÛ0=Aï@pËv"0âdQ#Ý4…§“#‰
 );éÁz’R_§NR¸Ð6€´HçÍã›)èüò^I²Fç…Ñ3:)AÍ:›ÑÏ·W'g”øšƒ4gt‹ž^^¼9ßL¹a…BHDÐ~ªØŒæ!Øi’x–£?0u4¦Æ)±ë²D»+ì  3ÊB+!EØ&ãáðm`ÌŒNOˆ%˜3Þ¤¡t™š4›Gëá‰[»ÌÊUÄÄ¡ŒŒö¹°¾ESÇ¢EcÞ‚¬·ˆµ’í¼=$w°‰éP²´1Ž[gzGçµ±C
°„è<¡ðkÌ–‰¡;˜²8ö€ºØƒ»­‚Ú-d§…—‡©MÅÊÛ>fGèùÐߊƒªx!z…ÂuyËÁ…@ƒ 
»CþôºbæÙA弇ÄdÔ®Hýev4Ü+—ewhÙËÐ>8SXz7 °»,ö4'›)3ÒÄ઺hRÙ
ß–OÍqã‹6m†nî‰ÁÇCs”OÌ›c
…,U¸…+Þ‹tã\)4Þ2¾PSzC°\¶WSe§"ÍŒx
Ë`
²±'¼{Ñ
*„(Èý¥ÚÙ«uDzÖ¡G·Fzвwûñíû`0(}CðW(ÖJMú4÷öööö¾LÃg½+!‘ 9YmÉ2~úûœMÆcr:ÉâšôàëKx¯a¯áÿ á³çx/ž÷›ÌëKn¯á_:™ãyœ:ÁaK¾@<šßþÛ—Å#õ|›-¿F‡ÍŒŽÆãI…ŸÇöéÙ¤‘Ùf×P²“˜Æü&õ'²üA7»ë¬LF5ýãS¡n·£Õp¥gC®e’´¿E’ÝÜ‹ŸPKäöƒ¯PK€¼SFword/_rels/document.xml.rels­’ÍJ1€ŸÀwsw³mEDšíE
½Êúivö‡&“LÅ}{£`°à‚‡=†!ß÷1Ìþðá¬xǘ&O
6U
Éøn¢AÁ[{¼‘XS§­'T0c‚Cs·E«9ÿIã’ÈJ
Fæð,e2#:*ò¤÷ÑiÎÏ8È ÍE(·uý(ão47LÑê8 +è=q«Ï«ŒÑÎÿ#ò}?|ñæêøŸ,`§NAÇM6ÞkÈhc¨Åu5
‹Z¼ÍžË;Q ©`”‹j±“ñÕh¶M€‹ÖbI”î¥D½¯°Š    Wš˜½"þÌ™”~W7Ãá­Ô1*©õãÑ#4jå¨xÚðq’Á¡(ºÆ6«*%gµ"®Ëu0_RÊ}BÅÊ].mÂ7y4¡­|°×½òd²5PLU¦å¹K~Äl¤‰zåYY¶9›Æjèõ­[ÊQ"Ü»ª¯xeÃàÒÖ^ž¢ó=ßpäLÍ\ž ·>V~™U—‡è­OA°|šcBÉaF€vC
˜’9d²§o¡ÏÖ1ÿâ¦Uÿ0±[; â©üÇâír÷£PKȤ›£H¨PK€¼SFoð„¬docProps/app.xmlPK€¼SF}Š·–â‰êdocProps/core.xmlPK€¼SF'œ±ÝX»word/numbering.xmlPK€¼SFˆê¢H©ˆ£word/settings.xmlPK€¼SF-ldv÷‹word/fontTable.xmlPK€¼SFå 7.bAword/styles.xmlPK€¼SFäöƒ¯à
word/document.xmlPK€¼SFin’øߨÎ
word/_rels/document.xml.relsPK€¼SF/]ãM÷_rels/.relsPK€¼SFȤ›£H¨[Content_Types].xmlPK

|œ
    [accessKey] => 
)
Google\u HttpRequest对象
(
[batchHeaders:Google\u HttpRequest:private]=>数组
(
[内容类型]=>应用程序/http
[内容传输编码]=>二进制
[MIME版本]=>1.0
[内容长度]=>
)
[url:受保护]=>https://docs.google.com/feeds/download/documents/export/Export?id=1aKI7o3g-eLNuLV7dAc-GS5OAKKWL3DLFVPABBJX0Y4&exportFormat=docx
[requestMethod:protected]=>GET
[requestHeaders:受保护]=>阵列
(
[授权]=>承载ya29.IAHncRF0XeCjbX967QqIOb3IDVfowGgmmSC6SDssBW1yFXdfX4MlxbcqOB21CRW1HmVtyqMfC1QzgQ
)
[正文:受保护]=>
[userAgent:protected]=>google api php客户端/0.6.5
[响应HttpCode:受保护]=>200
[响应头:受保护]=>阵列
(
[内容类型]=>application/vnd.openxmlformats-officedocument.wordprocessingml.document;字符集=utf-8
[x-robots-tag]=>无存档
[内容处置]=>附件;文件名=“asd.docx”
[set cookie]=>NID=67=W-YZgqChz2SoodlmbjJDk9WpVdCFMg9Z-mx2kgbxzryyuix0axfktvmnwzm6xq4uozg7nphec6xrwbmgtft4namqfqhuv4z-9l1dewkslmkiojhljhyyghvqeh0r20vz;域=.google.com;路径=/;到期日=Sat,2015年8月22日07:36:01 GMT;仅限HttpOnly
[p3p]=>CP=“这不是p3p策略!请参阅http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 有关详细信息,请参阅。“
[日期]=>2015年2月20日星期五07:36:01 GMT
[到期]=>2015年2月20日星期五07:36:01 GMT
[缓存控制]=>专用,最大年龄=0
[x-content-type-options]=>nosniff
[x-frame-options]=>SameOrgin
[x-xss-protection]=>1;模式=块
[服务器]=>GSE
[传输编码]=>分块
[替代方案]=>443:quic,p=0.08
)
[响应库:受保护]=>主键¼SF  docProps/app.xmlÁ
0DÀkªI[ñ«õm
'»!»Šþ½A={222ððð±}
2G ZÏg•VžBľžnžžap!fb™d‰IkcØt t V ™U-‡èOA|ècBèaF€vC
本次比赛的第二场比赛是在本场比赛的第五场比赛中的第五场比赛中的第五场比赛是在本场比赛中的第五场比赛中的第五场比赛是在本场比赛中的第五场比赛中的第五场比赛是在本场比赛中的第五场比赛中的第五场比赛是在本场比赛中的第五场比赛是在本场比赛中的第五场比赛是在本场比赛中的第五场比赛的第五场比赛,而第五场比赛是在本场比赛是在本场比赛中的第五场比赛是在本场比赛中的第五场比赛是在本场比赛的第五场比赛中的第五场比赛是在本场比赛中的第五场比赛中的第五场比赛是在本场比赛的第五场比赛的第五场比赛,而第五场比赛是在本场比赛是在本场比赛中的第五场比赛中,本场比赛是在本场比赛中的第五场比赛是在本ldv÷èword/fontTable.xmlPK¼SFå7.bAword/styles.xmlPK¼SFä195;ƒ
word/document.xmlPK
word/_rels/document.xml.relsPK¼SF/]M ÷ u rels/.relsPK¼SFÈ›H   [内容类型].xmlPK
|œ
[accessKey]=>
)
如何将responseBody解码为原始格式并写入文件。请提供一些示例代码。我还需要对以下导出格式执行同样的操作

  • application/vnd.openxmlformats-officedocument.presentationml.presentation
  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

  • 谢谢

    我知道我迟到了,但这会有帮助。我花了一整天的时间试图解决同样的问题。结果是浏览器无法翻译响应,因此您无法查看响应内容。您只需

    file_put_contents('BULK/Sample_08_TemplateCloneRow.docx',$httpRequest->getResponseBody());
    
    响应显示“[Content Type]=>application/http”。请尝试在请求头中将其更改为“application/json”。也可以尝试使用cURL手动执行相同的请求吗?