{"id":990,"date":"2017-02-14T22:17:14","date_gmt":"2017-02-14T13:17:14","guid":{"rendered":"http:\/\/esoro.jp\/?p=990"},"modified":"2018-07-30T18:14:37","modified_gmt":"2018-07-30T09:14:37","slug":"jax-rs%e3%81%a7web%e7%94%bb%e9%9d%a2%e3%81%ab%e3%83%89%e3%83%a9%e3%83%83%e3%82%b0%e3%82%a2%e3%83%b3%e3%83%89%e3%83%89%e3%83%ad%e3%83%83%e3%83%97%e3%81%95%e3%82%8c%e3%81%9f%e3%83%95%e3%82%a1%e3%82%a4","status":"publish","type":"post","link":"https:\/\/esoro.jp\/?p=990","title":{"rendered":"JAX-RS\u3067Web\u753b\u9762\u306b\u30c9\u30e9\u30c3\u30b0\u30a2\u30f3\u30c9\u30c9\u30ed\u30c3\u30d7\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080"},"content":{"rendered":"<p>\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u30b5\u30fc\u30d0\u3078\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u305f\u3044\u3068\u3044\u3046\u8981\u4ef6\u304c\u3042\u308a\u3001Web\u753b\u9762\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30e9\u30c3\u30b0\u30a2\u30f3\u30c9\u30c9\u30ed\u30c3\u30d7\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u3001\u305d\u308c\u3092JAX-RS\u3067\u51e6\u7406\u3059\u308b\u4e8b\u306b\u3057\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>\u4e0b\u8a18\u306e\u53c2\u8003\u306b\u3055\u305b\u3066\u9802\u304d\u3001\u305d\u308c\u3089\u3092\u7d44\u5408\u308f\u305b\u305f\u3060\u3051\u3068\u8a00\u3048\u3070\u3060\u3051\u3067\u3059\u304c\u3002\u3002<\/p>\n<p><a href=\"http:\/\/mabushiisign.hatenablog.jp\/entry\/2011\/06\/23\/150000\" target=\"_blank\">Jersey(JAX-RS)\u3067\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/a><br \/>\n<a href=\"http:\/\/www.techscore.com\/blog\/2012\/11\/12\/html5-%E3%81%AE-file-api-%E3%81%A7%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0%EF%BC%86%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E3%81%99%E3%82%8B\/\" target=\"_blank\">HTML5 \u306e File API \u3067\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u3059\u308b<\/a><\/p>\n<p>\u307e\u305a\u3001JAX-RS\u306e\u30eb\u30fc\u30c8\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059<\/p>\n<pre class=\"lang:java decode:true \" title=\"RestApplication.java\" >import javax.ws.rs.ApplicationPath;\r\nimport javax.ws.rs.core.Application;\r\n\r\n@ApplicationPath(\"\/api\")\r\npublic class RestApplication extends Application {\r\n\/\/\u4f55\u3082\u66f8\u304f\u4e8b\u306f\u3042\u308a\u307e\u305b\u3093\u30fb\u30fb\u30fb\r\n}\r\n<\/pre>\n<p>\u6b21\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3059\u308bJAX-RS\u90e8\u5206\u3092\u4f5c\u308a\u307e\u3059<\/p>\n<pre class=\"lang:java decode:true \" title=\"FileUploader.java\" >\r\nimport java.io.BufferedReader;\r\nimport java.io.IOException;\r\nimport java.io.InputStream;\r\nimport java.io.InputStreamReader;\r\nimport java.util.stream.Stream;\r\n\r\nimport javax.enterprise.context.RequestScoped;\r\nimport javax.ws.rs.Consumes;\r\nimport javax.ws.rs.POST;\r\nimport javax.ws.rs.Path;\r\nimport javax.ws.rs.core.MediaType;\r\nimport javax.ws.rs.core.Response;\r\n\r\nimport com.sun.jersey.core.header.FormDataContentDisposition;\r\nimport com.sun.jersey.multipart.FormDataParam;\r\n\r\n@RequestScoped\r\n@Path(\"\/upload\")\r\npublic class FileUploader {\r\n\t\r\n\t@POST\r\n\t@Consumes(MediaType.MULTIPART_FORM_DATA)\r\n\tpublic Response post(@FormDataParam(\"file\") InputStream fileStream,\r\n\t\t\t\t\t@FormDataParam(\"file\") FormDataContentDisposition fileDisposition) {\r\n\r\n\t\tint statusCode = 200;\r\n\t\tString out = \"\";\r\n\r\n\t\t\/\/\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\r\n\t\ttry (BufferedReader br = new BufferedReader(new InputStreamReader(fileStream))) {\r\n\t\t\ttry(Stream&lt;String&gt; lines = br.lines()){\r\n\t\t\t\t\/\/\uff11\u884c\u6bce\u306e\u51e6\u7406\u306f\u7701\u7565\r\n\t\t\t}\r\n        } catch (IOException e) {\r\n\t\t\tstatusCode = 400;\r\n\t\t\tout = e.getMessage();\r\n\t\t}\r\n\t\treturn Response.status(statusCode).type(\"text\/html;charset=Shift-JIS\").\r\n\t\t\tentity(out).\r\n\t\t\tbuild();\r\n\t}\r\n}\r\n<\/pre>\n<p>\u3053\u308c\u3067\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c0\u30fc\u306eJAX-RS\u30d1\u30b9\u306f\u3001{\u30b3\u30f3\u30c6\u30f3\u30c4\u30eb\u30fc\u30c8}\/api\/upload\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>\u7d9a\u3044\u3066JavaScript\u306e\u90e8\u5206\uff08\u6b86\u3069\u4e0a\u8a18\u53c2\u8003\u304b\u3089\u6301\u3063\u3066\u304d\u305f\u3060\u3051\u3067\u3059\u3002\u3002\uff09<\/p>\n<pre class=\"lang:js decode:true \" title=\"jq\" >$(function() {\r\n   var droppable = $(\"#droppable\");\r\n\r\n    \/\/ \u30a4\u30d9\u30f3\u30c8\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3059\u308b\u30cf\u30f3\u30c9\u30e9\u3067\u3059.\r\n    var cancelEvent = function(event) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        return false;\r\n    }\r\n\r\n    \/\/ dragenter, dragover \u30a4\u30d9\u30f3\u30c8\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u51e6\u7406\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u307e\u3059.\r\n    droppable.bind(\"dragenter\", cancelEvent);\r\n    droppable.bind(\"dragover\", cancelEvent);\r\n\r\n    \/\/ \u30c9\u30ed\u30c3\u30d7\u6642\u306e\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u3092\u8a2d\u5b9a\u3057\u307e\u3059.\r\n    var handleDroppedFile = function(event) {\r\n\r\n\t    var dropfile = event.originalEvent.dataTransfer.files[0];\r\n\t    \r\n\t    var formData = new FormData();\r\n\t    formData.append( 'file', dropfile );\r\n\t      \r\n\t    var hostUrl= 'api\/upload';\r\n\t    $.ajax({\r\n\t       url: hostUrl,\r\n\t       method: 'post',\r\n\t       dataType: 'json',\r\n\t       data: formData,\r\n\t       processData: false,\r\n\t       contentType: false,\r\n\t       timeout:100000\r\n\t    }).done(function(data) {\r\n        \talert( '\u6b63\u5e38\u306b\u7d42\u4e86\u3057\u307e\u3057\u305f');\r\n\t    }).fail(function( jqXHR, textStatus, errorThrown ) {\r\n\t         alert( '\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\\n'+ jqXHR.responseText);\r\n\t    });\r\n\t\r\n\t    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u51e6\u7406\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u307e\u3059.\r\n\t    cancelEvent(event);\r\n\t    return false;\r\n    }\r\n    \/\/ \u30c9\u30ed\u30c3\u30d7\u6642\u306e\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u3092\u8a2d\u5b9a\u3057\u307e\u3059.\r\n    droppable.bind(\"drop\", handleDroppedFile);\r\n});\r\n<\/pre>\n<p>\u6700\u5f8c\u306bHTML\u90e8\u5206\u306e\u30c9\u30e9\u30c3\u30b0\u30a2\u30f3\u30c9\u30c9\u30ed\u30c3\u30d7\u90e8\u5206\u3067\u3059\u3002<br \/>\n\u3053\u3053\u306b\u30c9\u30ed\u30c3\u30d7\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304cJAX-RS\u306e\u51e6\u7406\u7b87\u6240\u306eInputStream \u306b\u7e4b\u304c\u308a\u307e\u3059\u3002<\/p>\n<p><a href=\"\/wordpress\/wp-content\/uploads\/2017\/02\/66c19942ab4ba346fdb64ccc04cde373.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wordpress\/wp-content\/uploads\/2017\/02\/66c19942ab4ba346fdb64ccc04cde373.png\" alt=\"\" width=\"640\" height=\"107\" class=\"alignnone size-full wp-image-997\" \/><\/a><\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"xhtml\" >&lt;div class=\"droppable\" id=\"droppable\" style=\"border:gray solid 1em; width:100px; padding:2em;\"&gt;\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u306f\u30b3\u30b3\u306b\u30c9\u30ed\u30c3\u30d7\u3057\u3066\u304f\u3060\u3055\u3044\u3002&lt;\/div&gt;      \r\n<\/pre>\n<p>\u3053\u308c\u3067\u3068\u308a\u3042\u3048\u305a\u306fJAX-RS\u3067\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u304c\u51fa\u6765\u308b\u3053\u3068\u304c\u78ba\u8a8d\u51fa\u6765\u307e\u3057\u305f\u3002<\/p>\n<p>\u6700\u5f8c\u306bPOM\u3002<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"pom.xml\" >&lt;dependency&gt;\r\n    &lt;groupId&gt;javax.ws.rs&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;javax.ws.rs-api&lt;\/artifactId&gt;\r\n    &lt;version&gt;2.0.1&lt;\/version&gt;\r\n&lt;\/dependency&gt;\r\n&lt;!-- https:\/\/mvnrepository.com\/artifact\/com.sun.jersey.contribs\/jersey-multipart --&gt;\r\n&lt;dependency&gt;\r\n    &lt;groupId&gt;com.sun.jersey.contribs&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;jersey-multipart&lt;\/artifactId&gt;\r\n    &lt;version&gt;1.19.3&lt;\/version&gt;\r\n&lt;\/dependency&gt;\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u30b5\u30fc\u30d0\u3078\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u305f\u3044\u3068\u3044\u3046\u8981\u4ef6\u304c\u3042\u308a\u3001Web\u753b\u9762\u304b\u3089\u30d5\u30a1 &hellip; <a href=\"https:\/\/esoro.jp\/?p=990\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,6],"tags":[],"_links":{"self":[{"href":"https:\/\/esoro.jp\/index.php?rest_route=\/wp\/v2\/posts\/990"}],"collection":[{"href":"https:\/\/esoro.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esoro.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esoro.jp\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/esoro.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=990"}],"version-history":[{"count":0,"href":"https:\/\/esoro.jp\/index.php?rest_route=\/wp\/v2\/posts\/990\/revisions"}],"wp:attachment":[{"href":"https:\/\/esoro.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esoro.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esoro.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}