我正在向Box.com发送一个API请求,以获取PNG图像的缩略图。我在用拉拉威尔。当我使用以下代码时,我得到了要转换PNG图像的原始字符串数据。
$client = new Client('https://api.box.com/{version}/files/{file_id}', [
'version' => '2.0',
'file_id' => $id,
'request.options' => [
'headers' => [
'Authorization' => 'Bearer ' . self::getAccessToken(),
]
]
]);
$request = $client->get('thumbnail.png?min_height=256&min_width=256');
try {
$response = $request->send();
dd($response->getBody(true));
在不返回getBody()
方法字符串的情况下,我什么都得不到,因为Box.com将在正文中返回缩略图的内容。
下面是我得到的字符串示例:
b"""
‰PNG'r'n
'x1A'n
'x00'x00'x00'rIHDR'x00'x00'x01'x00'x00'x00'x01'x00'x08'x06'x00'x00'x00'r¨f'x00'x00'x00'x06bKGD'x00ÿ'x00ÿ'x00ÿ ½§“'x00'x00'x00'tpHYs'x00'x00'x00H'x00'x00'x00H'x00FÉk>'x00'x00'x00'tvpAg'x00'x00'x01'x00'x00'x00'x01'x00'x00²gÜŠ'x00'x00€'x00IDATxÚÌýiŒ-[–߇ýö'x14Ã9™y3ï}ᄅޫªî®êê2%Ñ$[à 'x19¶!Y&)'x1A”iC'x10`Ø0'x04I¶õÙ'x06,'x7F0'x0F$a›0!Û0M‘¢'x04'x0E¦Dv³'x075ÙÕC©ç¡º»z¨ù½'x1AÞ|ç'x1CΉˆ=ùÃÚ'x11'ÎÉ“Ã}]2'x1C'x0Fùnæ'x19"vìØkí5ü×'x7F©Óó''x19@)…RŠ˜'x13™ù‘Ñãoy眧ïí;²|ˆë'x0FÅö'x05óôÿ4~B©qÌ?¹ýÕŒš>¿ÿÈ{Æ£”"ç<½7~'x7F¼¿Ý×wÏ“sFk½ýZÊ 'x00'x12ÞwXcpÎñcÿäGøíßü5BPüþ—¾Ž±†'x14#'x19è;O×]'x00‰¾_ã½/3¤dš²"gEŒ'x11¥ÔtÍÍØ˳ș'x10#Zk¬5[ã'x1AŸWJ2»Z),š@ÆÇPÆž¶î{3G't'r0*•ëRÖÆZGJi'x1A_y'x13'x15ÖT'fÞ“‰h5Η¡ª'x1CÚ'x18'x19óà‰1¢†'fYAUUÔuÍ0'f[ÏDk1'x1Ac'x1C9'B'x08TUÅb± gMí'x0Eù÷þÝÿ€ÿî'x7Fï_áÃ'ï¡ŒA;M&SåŒÒzöüT¹Ç²'UùㆵôÿoÇî3»êÏÈ<Úýg‚'x14eRµ ÕÖE'x00RJ{'x05cç4Üb8EP惓Co^$“IYm>ªæ'x0F-ï'x15ÎÛ>¼}“6'n
Õü~÷)»ËBRþVY'x16f'x1CÐ'x1A'x1E<xÈ_ùË'x7F™EÓÒwkÖë'x18#'x17'x17ç'x18c'x08>'x12Ä'x18I)'x10cœÎ•'x15¨œ'x01CJyKè'eE'x16¥“5Z+Œ¶“ ŒB©õ¶'n
•û1„''x16~Ö@Þ{¯£°§,Š8'x15Á×J¡´"%EŒ‰œå»:Éx´QXeE¦væ'x162!'x04'x08ÊU4ÖÑ…'x04Q'x06'x14É'f'fhEÉ”9Ù܇(¥ñ'x08Á³^iÛ'x03ž>{Äßø›ÿ1_{ó+üÅÿÉÿ”>'U¶Š”'x1Dz6wj:›h€<{Äó¹Ø}Ö7¥›>£§g÷9n'x12þ}r2Wƒä”ÉãDŒS¢.'vÿøûø`æ'vr÷çºÁlÞß'x7Fù¡Pä4'x1A'x14£ÕPVnÙùwÏ?*©ÛŒgßw÷Ýëí'x1F@"'x13'x08¡çøø˜¿ÿ÷ÿ.¿÷{¿‹ÖŽÓ§kúÁ£µ,ê¾ï'x19'x06Oˆ‘˜â´ÐSJò'x13#1&RÊh}yÞ)S!ceë}™¢Ë'x16€R'n
cŒì¶Jì-äûƘÉJ˜Ïáø¤2²ãÇl'x08I'x11"(•€@Îò“ˆ$'x15‰9àCOïûÙcV['x16L'x08'x01¥ÀY+c'x18Ç]þ‹1N?ãx¼÷Ó=Ž–R'x08‘~è9;'x7FJU+'x1E?y‡ÿìïü'üÌg'x7F†E]ã»'x0E•6s²µ.ÆŸG<^c¾á]wÌç÷ÆÏd™z]~H'x19•òô÷üGM?Yþ¥<¶2WE;_«M6ãß|È&5'x7F°y:±Ñ'n
ãì¥'t™Ÿì;e'x1EM¦×l‚.'v'x14h}…rØ£¡çç¹Í1í¶;nÍüïq'x11ì;¯ì'x142“!'x052"Ø'GGü½¿÷Ÿó³?û9¾÷{¿Ÿ'x0F'x1F< ÷žÞwX+'x06X'x08'x1E'fÞ'x0FÄ'x14'x10‹xŸÂºäô'žƒ¸3æÙï£ÐUUEJi'x12<Hh£ÐFîËÚ†¾ï'ÛwŒ»°Œ(ô'x13Ï,'x08-®KR't2h¥‘Ó)òÌÚ'x00è‡'x01¯'x03É(bH"ú9@L$£Š|¦òyKJ‰aÐ8[Íž]$„HΉõúŒÃ£CŽ'x0F'x0Fù+'x7FåÿÈK¯üUþù'x7Fñ¿Åã'OX.Ýf:)›ËölnŸ«'¿ùßÛ›ã~Ï÷*ËtRæ)m¹&›‘̧2ð'x1D·y|?å<½µ»aoddöúÓ‹Çy'À(…¾”§›È»'x03Þ½»¼{C›kŒ'x0Fø*Óyòcaï.~ÝuPÛ'x13z'e'x05°ï3û'x1Eêh2ßÖ¯Úún'n
taÍÑbÉÃ'x07ïóïü;ÿK'x16Í]@'x11c “ñƒ‡œéûž¾'x1Fd×Lž'x10â4®4w'x03r"cQJO×'x11Aß'×'x1A‡RfÚ±Æç Ôæ>1Ôuµ–õz'rdb'x1CPJÏ”Ž™¬¹5tµ'v”PjÛ]J)cŒÞ|''e(f<ˆ•1~?¥´eam”N'x002ιò¹éœÉ8SSW'vbô(•È$BJhmq®¢®'x174®Á'x0Fž”áoüÍ¿Å'v/Üålý”¦YÈwrBa‹BS›e¦Š'x1D|źÝ]só¿s¾z³š'x1Fzwy“E'x19Í]»'rgW!_z'x1ElÄä*¹Ø'x1AÃÎÝMÚcnY>'x00Ì'x17çü{»æøü³J)2Š´õ³çØØA“ðß4Žç'x19óüßçµnæ÷–RÂ'x02Ýê”ÿè/ý%â ‹»ëÖ¬V+Ö«5Cß³Z'x08!L®À'èÈ'x19=úØåÖ·'x03•'x1A¥2"$QLp'x15ÑF¡t&'x13G'eqúŽµ'x16k'r©ëŠ¶mpÎaŒ#¥LUÕhm&!ݧ,÷í†9³ež‹{¡ËwÆu´'x11à]·qsÂm×M''x05MŒ©Ä'x17Ƶ‚'x04'x0EÕÜòbº×'x18Å'x12'x18úu·¢®'x1DëÕ'x05ÿç¿úWyvzŠVfR®JAVâjŒëJ+0*£È¨œP)A”ŸÑ'x1CÏyg=çòy'x10{b'fHÏ~¶ærßòÞ±<ækr'x1Eó¹ÊÍÈ;nëÍk¸Ä'x00òü'v{LÏ‹ßF'x1AJ`nôÓ®'vœMç'x1Fýݙ߹{ì¾~'eÿþºÏìúúû”ÓíŽmí'x1F'x06ÏñCþÊ_ù?ñæW¿ÆA}‡¾ëI)•'x1D¿g'x18'x06Bð'fÃÀ0øiל+J¥ÔF‚Ô¾lÉÆnR'n
RÊ[Šd¾«j‹°'eŒ1²àË÷mp¶Áššº^Hl`Çú'x19M~õôžµ¶ü¾]PJQUM±Fdg'x7Fn' WLãìy¥K'x01ÉyÌ#çqGTEð7ë'F't¤'x06ßs~q΋/ÞãÇ~ô'x1Fó'x0FÿÁ?äèè„uwQ'x02ŸvÚu·×Æ•ÃÛz'x06ã#Ú'x08½('x10ÚñáE™èœÐÈç2iKñl6¶¼y>;'eÞMY·<›Ã›â'x169ƒV%'x12¨•BoìÅí%¶'ò'x7F8Ì'x16Ý8˜]µ+˜i.|W(šÍw/¿öQŽ}©¿yŠlþÞüõKãʱ<#Mß_prÒð'x13?úÃüê/'x7Fžû/½N7x'x06?L»d'x08Pv©'x10'x02>xB'f¨Ùœ¥Q9•hù|wÜÝiE'x10M'x11‚0'tÿ˜'x01'x18?'eBÀûHJ'n
"""
我得到了图像作为唯一字符串值的成功响应
$response = $this->client->request('GET', '/ap/generate-example/qr/image', [
'headers' => [
'Content-Type' => 'application/json',
'user_name' => 'user_name',
'password' => 'password',
'Authorization' => "Bearer assdadga",
'width' => '300',
'height' => '300',
'imgtype' => 'jpg'
],
// 'sink' => '/uploads/images'
]);
$body = $response->getBody();
$base64 = base64_encode($body);
$mime = "image/jpeg";
$img = ('data:' . $mime . ';base64,' . $base64);
dd($img);
输出:data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCADcANwBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaE
让我们一起来看<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQA" />
我自己已经在Laravel 5.1上使用Guzzle3解决了这个问题。以下是相关代码,我希望您将来会发现它有帮助:
在你的模型中,或者如果你更喜欢使用控制器,那么它很好:
/**
* Get download link from Box.com
*
* @param $id
* @return bool|int|string
*/
public static function getDownloadLink($id)
{
$client = new Client('https://api.box.com/{version}/files/{file_id}', [
'version' => '2.0',
'file_id' => $id,
'request.options' => [
'headers' => [
'Authorization' => 'Bearer ' . self::getAccessToken(),
]
]
]);
$request = $client->get('content');
try {
$response = $request->send();
$result = $response->getEffectiveUrl();
} catch (BadResponseException $e) {
$result = $e->getResponse()->getStatusCode();
if ($result === 401) {
self::regenerateAccessToken();
return self::getDownloadLink($id);
}
}
return count($result) ? $result : false;
}
在上面的静态方法中,我向Box.com API发送了一个GET
请求,API返回effectiveUrl
,这是我们正在寻找的直接下载文件链接。