{"id":1003,"date":"2011-02-02T02:44:30","date_gmt":"2011-02-01T17:44:30","guid":{"rendered":"http:\/\/www.kazu.tv\/blog\/?p=1003"},"modified":"2013-09-16T21:19:47","modified_gmt":"2013-09-16T12:19:47","slug":"lift_show_image","status":"publish","type":"post","link":"https:\/\/kazu.tv\/blog\/2011\/02\/02\/lift_show_image\/","title":{"rendered":"Lift\u3067\u753b\u50cf\u8868\u793a"},"content":{"rendered":"<p>\u30bf\u30a4\u30c8\u30eb\u901a\u308a\u3060\u3051\u3069\u3001&lt;img src=&quot;foo.jpg&quot; \/&gt;\u3068\u304b\u305d\u3046\u8a00\u3046\u8a71\u3067\u306f\u306a\u304f\u3001DB\u5185\u3084\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306b\u3042\u308b\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3001\u305d\u308c\u3092\u30d6\u30e9\u30a6\u30b6\u306b\u51fa\u529b\u3059\u308b\u65b9\u6cd5\u3002\u4ee5\u524d\u3001\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u753b\u50cf\u3092DB\u306b\u683c\u7d0d\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066<a href=\"http:\/\/www.kazu.tv\/blog\/archives\/001001.html\" target=\"_blank\">\u30a8\u30f3\u30c8\u30ea<\/a>\u3092\u66f8\u3044\u305f\u306e\u3067\u3001\u305d\u308c\u3068\u4f75\u305b\u3066\u8aad\u3080\u3068\u3044\u3044\u304b\u3082\u3002<\/p>\n<h3>\u25a0\u74b0\u5883<\/h3>\n<ul>\n<li>Lift 2.2 \uff08\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3082\u57fa\u672c\u306f\u4e00\u7dd2\u306e\u306f\u305a\uff09<\/li>\n<li>Scala 2.8<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><!--more--><\/p>\n<h3>\u25a0\u3084\u308a\u305f\u3044\u4e8b<\/h3>\n<p>DB\u3067\u3082\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3067\u3082\u3044\u3044\u3093\u3067\u3001\u3069\u3063\u304b\u306b\u753b\u50cf\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u3068\u3059\u308b\u3002<\/p>\n<p>http:\/\/lift.example.com\/image\/xx<\/p>\n<p>\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001ID\u304cxx\u306e\u753b\u50cf\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u3002<\/p>\n<h3>\u25a0\u30eb\u30fc\u30eb\uff08\uff1f\uff09\u306e\u767b\u9332<\/h3>\n<p>Boot.scala\u306b\u4ee5\u4e0b\u306e\u8a18\u8ff0\u3092\u8ffd\u52a0\u3002\/image\/&lt;id&gt; \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001ImageHandler.show(id) \u304c\u547c\u3070\u308c\u308b\u3002<\/p>\n<pre class=\"brush: scala; code\">\nLiftRules.statelessDispatchTable.append{\ncase Req( &quot;image&quot; :: id :: Nil, _, _ ) =&gt;\n() =&gt; ImageHandler.show(id)\n}\n<\/pre>\n<h3>&nbsp;\u25a0\u753b\u50cf\u306e\u8868\u793a<\/h3>\n<p>&nbsp;DB\u304b\u3089\u753b\u50cf\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3001\u30d0\u30a4\u30ca\u30ea\u30b9\u30c8\u30ea\u30fc\u30e0\u3068\u3057\u3066\u51fa\u529b\u3002<\/p>\n<pre class=\"brush: scala; code\">\nobject ImageHandler {\ndef show(id: String): Box[LiftResponse] = {\n\/\/ DB\u304b\u3089\u30c7\u30fc\u30bf\u306e\u53d6\u5f97\nModelFoo.find(By(ModelFoo.id, id.toLong)) match {\ncase Full(modelFoo) if (modelFoo.imageFormat.is != null) =&gt; {\n\/\/ HTTP\u30d8\u30c3\u30c0\u30fc\nval headers = (&quot;Content-type&quot; -&gt; (&quot;image\/&quot; + modelFoo.imageFormat.toLowerCase)) ::\n(&quot;Cache-Control&quot; -&gt; &quot;no-store&quot;) ::\n(&quot;Pragma&quot;, &quot;no-cache&quot;) ::\n(&quot;Expires&quot;, &quot;0&quot; ) ::\n(&quot;Content-length&quot; -&gt; modelFoo.image.length.toString) :: Nil\n\/\/ \u30d0\u30a4\u30ca\u30ea\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u8fd4\u3059\nFull(StreamingResponse( new java.io.ByteArrayInputStream(modelFoo.image.get),\n() =&gt; {}, modelFoo.image.length, headers, Nil, 200) )\n}\ncase _ =&gt; Empty\n}\n}\n}\n<\/pre>\n<p>\u25a0\u305d\u306e\u4ed6<\/p>\n<p>\u53c2\u8003\u306b\u3057\u305f\u306e\u306f\u3001\u3054\u5b58\u77e5\u3001takedasoft\u3055\u3093\u306e\u3053\u306e<a href=\"http:\/\/blog.takeda-soft.jp\/blog\/show\/387\" target=\"_blank\">\u30da\u30fc\u30b8<\/a>\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u30bf\u30a4\u30c8\u30eb\u901a\u308a\u3060\u3051\u3069\u3001&lt;img src=&quot;foo.jpg&quot; \/&gt;\u3068\u304b\u305d\u3046\u8a00\u3046\u8a71\u3067\u306f\u306a\u304f\u3001DB\u5185\u3084\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306b\u3042\u308b\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3001\u305d\u308c\u3092\u30d6\u30e9\u30a6\u30b6\u306b\u51fa\u529b\u3059\u308b\u65b9\u6cd5\u3002\u4ee5\u524d\u3001\u30a2\u30c3\u30d7\u30ed\u30fc&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[20],"tags":[17,947,434,45,863],"class_list":["post-1003","post","type-post","status-publish","format-standard","hentry","category-scala","tag-lift","tag-scala","tag-434","tag-45","tag-863"],"_links":{"self":[{"href":"https:\/\/kazu.tv\/blog\/wp-json\/wp\/v2\/posts\/1003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kazu.tv\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kazu.tv\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kazu.tv\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kazu.tv\/blog\/wp-json\/wp\/v2\/comments?post=1003"}],"version-history":[{"count":1,"href":"https:\/\/kazu.tv\/blog\/wp-json\/wp\/v2\/posts\/1003\/revisions"}],"predecessor-version":[{"id":1149,"href":"https:\/\/kazu.tv\/blog\/wp-json\/wp\/v2\/posts\/1003\/revisions\/1149"}],"wp:attachment":[{"href":"https:\/\/kazu.tv\/blog\/wp-json\/wp\/v2\/media?parent=1003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kazu.tv\/blog\/wp-json\/wp\/v2\/categories?post=1003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kazu.tv\/blog\/wp-json\/wp\/v2\/tags?post=1003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}