在响应中创建带有图像的RESTful API无效

时间:2014-09-24 12:14:12

标签: php image api rest slim

我正在使用SLIM Framework和PHP编写REST API。我想从目录加载图像并将其发送回Response。

这是我的代码:

//Load SLIM-Framework
include 'api_model.php';
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();

$app->get('/image/:supportID/:last_login/:device_token', function ($supportID, $last_login, $device_token) use($app) {

        $image = file_get_contents("images/Koala.png");
        $res = $app->response();
        $res->header('Content-type', 'image/png');
        $res->header('Content-Disposition', 'inline; filename="Koala.png"');
        $res->body($image);

});

//Start the routing per instance
$app->run();

请忽略函数中的参数,这没关系。

如果我使用RESTClient(Firefox)测试请求,我得到以下响应,而不是图像。

‰PNG  IHDR5Ø‚ZsRGB®ÎégAMA±üa pHYsÃÃÇo¨dtIMEÙ 07ÛÀ tEXtAuthorCorbis`É;Î tEXtCreationTime2008:02:11 11:32:43~¾j±tEXtSoftwarePaint.NET v3.5.100ôr¡ÿ'IDATx^Lýçs$G–ö‰ö_óîtS•ª Z#µÖZk­R!R Z ´&KW‘UE²§›Ýlj6uË™µµ}mÍî‡]»vï;÷9‘œ¶kæéá*Èßã~ÎñŸÙ5NÝHÀ8áÒRÒúã6Åy§æœ[;fW:µãÝ„S18Ç1hž ˜¦]úq§nÉeœpàvõ#VÍ°Y>¨—õY4ýNó¨Ï4ã5N;4”M?î5M¹µ#nÝUѺœš—fØo™2k†q£ßÊB‰Ó0ê1O¹ŒcvÝ šçлt^ã¬[?kUŽÚµc^óŒÏ:åÐÙÔƒNÝPÐ4éÑ¡‘ã!ˬß8Ìh$ÚŒªý–\w¨Ï»Ô~øÇ4ä7NSný$²ùTÃ^í¸W7m—ÛÅý~é¹ü\PÖŸHÝ‚Ó!Ñù˜|G'珞ßçž÷Î$^ပÕgc÷›gN#YØ}þy¯hØ/÷ŠF™4”†äcA]aÎ'\‚a+oÄ!×Ož1Ìö™9ªñ“’á_ˆG_QÍœÒM÷á£tä5ùØkÈ ~M=qJ3}F6~B:ôºrüU礉;`á˜yçuÓ§3§lì3ú‰×ôS'4ÜsZN¿ž{VÏ:Û»E6ñº|ìÙè/t3çÍœ %g@É=iÙyÓÊñ3’É×5Ü~½à¼†? ‹ÇNȦΈÇO‰&ÎòGO ÆN³‡ß` ½ÎzC0~R0~B4IŃ¢©sâé>ÉôàœE>a ›DãnÏ¢ØØ1—ÈoæblñèýæYŸy2`ƃð¦˜óY¯e_Eü¨Sˆ¸4±cv×2é6ŒøÌÓ!'âäl\Ÿ™°ò=F6Š :Ø!;×ñ¶„ìx¬SQ+êâxŒ£(?â¡´”ŸvЋ´±ÂvnÐÊ Ûù8G† c6é¥üb”@å;xQÏkqèûí¦·yÀc ;81— å“$¼Â°ƒõßi9“>ägEÝ3 /?”§’ˆsçQ÷tÀ:s³Ó>^È:q³ü.J7'æåá òÒ!q:$Å- )éÌEù¨r.¬,Äd™?ÏEdùˆ*í—Ç=ô"ãçGýÜdDž‹«²1U.,N¸gãN~>¨B¶\HUˆ©¨p.¦ÌEi¿4Pd‚ê„GRŒéJq=:[NjsaiÊï$´¸˜ËQN>.ÈE©mF´ ׋q%R>®È†$I?'éá"ÂBL‘ Ë’ae9eÌE„I?­m¬å„®ž3µòº|HZ©‹aM=m,ǔŨ´‘"’jÖ´P0•“jt™r6¤¹¨(æ•Ó‚RR–Jç3ú¹¨•Î'å¤2•£™°(ã—ãÒù¤±œ0å#4©ž7.UÃKó‘媥âÆ·ù˜¨””¢BB]Nk qÍ|ÚTËX Q=œ«æ3êlXðrÑM”PI¨‹qy5m.'õ”¹š0bK M%­Ïh %žž®à#R1‰ôå´ %c5žŠ*DÕ¸q."™OËçS¼K¸ŽTŒ«1VÛJZëxHx.ÿJZ_Ípã\XMO<"AþJÖ€„É?•cêÞS(¥´¥¤®WZ>B'Ù0?åSÒRB•òÉP#¾*&8bШñh[X‰‡‹®¡ýÔN¿0 l>iFÕX¼¥¸ŽÆ`¬ð>Ðë•RJôc…¨®˜n>¦ÇÃ*ŵt17S1ÃËkY}#k¨g4í‚q©dYˆ©s–µ’u)§Ý(›wLë%ÝzѺ^2íVìW—BWÖÓwºÙ»+åG«É7—’ooÎ=Û-<ÝÌ¿³Sz¾[ü÷£ú®µ>¼Úþíqýƒ‹?^ï~tcéã[+Hº±úû«Ýß_]üôöÆgw×?¿¿ùùƒõ¯ì|õhÿó‡_=<úâÁ®|ùd÷϶>¹¿öÙýµïÞÙýúùîgV>{´ôéã¥?=hò¨óç«_¼ÝùèÞ‡ç?{ÒøüEóó+Ÿ¾½ýåó/žnþéñöW/ÿü«ËŸ<ÙÿýýÝì}xÿ÷ÿt÷ð7×·w{÷ƒë›¿¾²òÁõõ___ýåÕíÇÖoï/ÝÝ]º¿Ý|´Y~²W»º;e½t}»|}«r´”;heŽ–ò‹éjx¥ì]+{–ʮժ·[puŠÖ朾Ó4Ò–FÞR˘Ê9ÍbQ¿P1”r’vU¹ÜÕÕÛ’FCº²nZݲ,o˜:«ú¥Óú¦}mÃÖîZ–W\¦¡º m¶¬µŠ>Ÿ“—º…²¥š3âUÁL¥a âã墒|BRÌÊÉ|FZÉJJòFQÙΫ›%E§ÄïÎÏ®VYk5ö^·4Ï[«röZÒÍ:o­4»Va/9¥<·œ6óªJNYžSf£Ât˜ŸŽ‹²iI:)Î&e©¸,‘…}ÂxH”MŠ1A"*CÂE¤DD˜ˆðqË¢!1¥07‚ÿ~ e*¦Œáï1ÎÎe¤sm2¡Ê&5‰ˆ<“TU –bÆ”©bE.¥ÅßWÒ+ÍÅÕs uÂ/Šâ?aT‘‹é£nA2ÈÉFy‰0ïv6¦É¦Ô~7/Sç’š—psãq4(‹¤Ñ $‘¢^$œ'"êhP‘)ÒqM<&G“âa8ÀxyÌ·rjpPýnÈ+H'pE€ úï§Å?á¹´}.nØ/B÷CLò¹øa¿e"¡R|ô»Eè)îg1%*$•ãJÈ7öáII.AØ+Ž•©ˆÆãà"…<è©<ìS=²°Wô("^UÔ§{åèZ4Ä

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这就是我正在做的事情。 PNG文件是基于64位编码的,需要一些JPG / GIF不需要的东西。大部分都忽略视图部分,但是如果它是假的,它将/应该触发下载。

$filename = "images/Koala.png";
// this is apparently not necessary
// $imageData = base64_encode(file_get_contents($filename));

$view = $app->request->get('view');

$res = $app->response();
$res['Content-Description'] = 'File Transfer';
$res['Content-Type'] = mime_content_type($filename);
$res['Content-Disposition'] = ((!$view)? 'attachment; ': '').'filename='.basename($filename);
$res['Content-Transfer-Encoding'] = 'base64';
$res['Content-Length'] = filesize($filename);

readfile($filename);