{"id":4478,"date":"2023-09-09T15:18:53","date_gmt":"2023-09-09T06:18:53","guid":{"rendered":"http:\/\/attacktube.com\/?p=4478"},"modified":"2023-09-10T08:34:29","modified_gmt":"2023-09-09T23:34:29","slug":"%e3%80%90javascript%e3%80%91%e7%94%bb%e5%83%8f%e3%81%ae%e5%88%86%e8%a7%a3%e3%81%a8%e5%86%8d%e6%a7%8b%e6%88%90","status":"publish","type":"post","link":"https:\/\/attacktube.com\/?p=4478","title":{"rendered":"\u3010JavaScript\u3011\u753b\u50cf\u306e\u5206\u89e3\u3068\u518d\u69cb\u6210\u3010\u4e2d\u7d1a\u8005\u3011"},"content":{"rendered":"\n<p>\u6b21\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u6307\u5b9a\u3057\u305fURL\u306e\u753b\u50cf\u3092\u5206\u89e3\u3057\u3066\u518d\u69cb\u6210\u3057\u3001\u30d6\u30e9\u30a6\u30b6\u306b\u8868\u793a\u3059\u308b\u3002<br>fetch \u3092\u4f7f\u7528\u3057\u3066\u753b\u50cf\u3092\u53d6\u5f97\u3057\u3001Blob\u3092\u4f7f\u3063\u3066\u753b\u50cf\u3092\u5206\u5272\u3057\u3066\u518d\u69cb\u6210\u3059\u308b\u3002<br><br>\u3053\u306e\u30b3\u30fc\u30c9\u306f\u6b21\u306e\u95a2\u6570\u7b49\u3092\u5b66\u7fd2\u3059\u308b\u305f\u3081\u306e\u30b3\u30fc\u30c9\u3067\u3042\u308b\u3002<br>fetch()\u95a2\u6570<br>new Blob()\u3067\u65b0\u3057\u3044Blob\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u751f\u6210<br>URL.createObjectURL()\u95a2\u6570<br>URL.revokeObjectURL()\u95a2\u6570<br>async\/await \u975e\u540c\u671f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3092\u884c\u3046\u305f\u3081\u306e\u69cb\u6587<\/p>\n\n\n\n<!--more-->\n\n\n\n<br>\n<script async=\"\" src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-3461056110605997\" crossorigin=\"anonymous\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-3461056110605997\" data-ad-slot=\"3137443461\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n<br>\n\n\n\n<pre><code>\n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;ja&quot;&gt;\n\n&lt;head&gt;\n\n  &lt;meta charset=&quot;utf-8&quot;&gt;\n  &lt;title&gt;sample&lt;\/title&gt;\n\n  &lt;style&gt;\n  &lt;\/style&gt;\n\n&lt;\/head&gt;\n\n&lt;body&gt;\n\n  \u3053\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u6307\u5b9a\u3057\u305fURL\u306e\u753b\u50cf\u3092\u5206\u89e3\u3057\u3066\u518d\u69cb\u6210\u3057\u3001\u30d6\u30e9\u30a6\u30b6\u306b\u8868\u793a\u3059\u308b\u3002&lt;br&gt;\n  fetch \u3092\u4f7f\u7528\u3057\u3066\u753b\u50cf\u3092\u53d6\u5f97\u3057\u3001Blob\u3092\u4f7f\u3063\u3066\u753b\u50cf\u3092\u5206\u5272\u3057\u3066\u518d\u69cb\u6210\u3059\u308b\u3002&lt;br&gt;\n  &lt;br&gt;\n\n  &lt;button id=&quot;button&quot;&gt;\u30dc\u30bf\u30f3&lt;\/button&gt;\n\n  &lt;br&gt;\n\n  &lt;div id=&quot;test&quot;&gt;\n  &lt;\/div&gt;\n\n  &lt;script&gt;\n    const loadImg = (function() {\n\n      \/\/ \u753b\u50cf\u306eURL\n      const imageUrl = &#039;http:\/\/localhost\/test13\/001.jpg&#039;;\n\n      \/\/ \u65b0\u3057\u3044Image\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\n      const imgElement = new Image();\n\n      \/\/ \u753b\u50cf\u3092\u8aad\u307f\u8fbc\u3093\u3067\u5206\u89e3\u3057\u3066\u518d\u69cb\u6210\u3059\u308b\u95a2\u6570\n      async function getImage() {\n\n        \/\/ \u753b\u50cf\u3092\u53d6\u5f97\n        const response = await fetch(imageUrl);\n        const blob = await response.blob();\n\n        \/\/ \u753b\u50cf\u3092\u5206\u89e3\u3057\u3066\u518d\u69cb\u6210\n        const blobParts = [];\n        const chunkSize = 1024*10; \/\/ \u30c1\u30e3\u30f3\u30af\u30b5\u30a4\u30ba (1KB)\n\n        console.log(&#039;blob = &#039;, blob);\/\/ Blob { size: 350191, type: &quot;image\/jpeg&quot; }\n\n        for (let i = 0; i &lt; blob.size; i += chunkSize) {\n          const chunk = blob.slice(i, i + chunkSize);\n          console.log(&#039;chunk = &#039;, chunk);\/\/ Blob { size: 10240, type: &quot;&quot; }\n          blobParts.push(chunk);\n        }\n\n        console.log(&#039;blobParts = &#039;, blobParts);\/\/ Array(35) [ Blob, Blob, Blob, Blob, Blob, Blob, Blob, Blob, Blob, Blob, \u2026 ]\n\n        \/\/ Blob\u306e\u914d\u5217\u304b\u3089\u65b0\u3057\u3044Blob\u3092\u4f5c\u6210\n        const reconstructedBlob = new Blob(blobParts);\n\n        const testElement = document.getElementById(&#039;test&#039;);\n\n        console.log(&#039;imgElement.src = &#039;, imgElement.src);\n\n        if (imgElement.src) {\n          URL.revokeObjectURL(imgElement.src);\n          console.warn(&#039;URL.revokeObjectURL(imgElement.src)\u3092\u5b9f\u884c\u3057\u305f\u3002&#039;);\n        } else {\n          console.log(&#039;else imgElement.src = &#039;, imgElement.src);\n        }\n\n        \/\/ \u4ee5\u524d\u306e\u753b\u50cf\u3092\u30af\u30ea\u30a2\n        if (testElement) {\n          testElement.innerHTML = &#039;&#039;; \/\/ \u3059\u3079\u3066\u306e\u5b50\u8981\u7d20\u3092\u30af\u30ea\u30a2\n        }\n\n        imgElement.src = URL.createObjectURL(reconstructedBlob);\n\n        console.log(&#039;imgElement.src = &#039;, imgElement.src);\n\n        testElement.appendChild(imgElement);\n\n      }\n\n      const Button = document.getElementById(&#039;button&#039;);\n\n      \/\/ \u753b\u50cf\u306e\u5206\u89e3\u3068\u518d\u69cb\u6210\u3092\u5b9f\u884c\n      Button.addEventListener(&#039;click&#039;, () =&gt; getImage());\n\n    })();\n\n  &lt;\/script&gt;\n\n&lt;\/body&gt;\n\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>\u5225\u30d0\u30fc\u30b8\u30e7\u30f3\u3002for\u6587\u3092while\u6587\u306b\u66f8\u304d\u76f4\u3057\u305f\u3002<\/p>\n\n\n\n<pre><code>\n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;ja&quot;&gt;\n\n&lt;head&gt;\n\n  &lt;meta charset=&quot;utf-8&quot;&gt;\n  &lt;title&gt;sample&lt;\/title&gt;\n\n  &lt;style&gt;\n  &lt;\/style&gt;\n\n&lt;\/head&gt;\n\n&lt;body&gt;\n\n  \u3053\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u6307\u5b9a\u3057\u305fURL\u306e\u753b\u50cf\u3092\u5206\u89e3\u3057\u3066\u518d\u69cb\u6210\u3057\u3001\u30d6\u30e9\u30a6\u30b6\u306b\u8868\u793a\u3059\u308b\u3002&lt;br&gt;\n  fetch \u3092\u4f7f\u7528\u3057\u3066\u753b\u50cf\u3092\u53d6\u5f97\u3057\u3001Blob\u3092\u4f7f\u3063\u3066\u753b\u50cf\u3092\u5206\u5272\u3057\u3066\u518d\u69cb\u6210\u3059\u308b\u3002&lt;br&gt;\n  &lt;br&gt;\n\n  &lt;button id=&quot;button&quot;&gt;\u30dc\u30bf\u30f3&lt;\/button&gt;\n\n  &lt;br&gt;\n\n  &lt;div id=&quot;test&quot;&gt;\n  &lt;\/div&gt;\n\n  &lt;script&gt;\n    const loadImg = (function() {\n\n      \/\/ \u753b\u50cf\u306eURL\n      const imageUrl = &#039;http:\/\/localhost\/test13\/001.jpg&#039;;\n\n      \/\/ \u65b0\u3057\u3044Image\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\n      const imgElement = new Image();\n\n      \/\/ \u753b\u50cf\u3092\u8aad\u307f\u8fbc\u3093\u3067\u5206\u89e3\u3057\u3066\u518d\u69cb\u6210\u3059\u308b\u95a2\u6570\n      async function getImage() {\n\n        \/\/ \u753b\u50cf\u3092\u53d6\u5f97\n        const response = await fetch(imageUrl);\n        const blob = await response.blob();\n\n        \/\/ \u753b\u50cf\u3092\u5206\u89e3\u3057\u3066\u518d\u69cb\u6210\n        const blobParts = [];\n        const promises = [];\n        const chunkSize = 1024*10; \/\/ \u30c1\u30e3\u30f3\u30af\u30b5\u30a4\u30ba (1KB)\n\n        console.log(&#039;blob = &#039;, blob);\/\/ Blob { size: 350191, type: &quot;image\/jpeg&quot; }\n\n        let offset = 0;\n        let receivedSize = 0;\n        const arrayBufferList = [];\n\n        while (receivedSize !== blob.size) {\n          const chunk = await blob.slice(offset, offset + chunkSize).arrayBuffer();\n          console.log(&#039;chunk = &#039;, chunk);\/\/ArrayBuffer { byteLength: 10240 }\n          receivedSize += chunk.byteLength;\n          console.log(&#039;receivedSize = &#039; + receivedSize);\n          arrayBufferList.push(chunk);\n          offset += chunkSize;\n        }\n\n        console.log(&#039;arrayBufferList = &#039;, arrayBufferList);\/\/ Array(35) [ Blob, Blob, Blob, Blob, Blob, Blob, Blob, Blob, Blob, Blob, \u2026 ]\n\n        \/\/ arrayBufferList\u3092Blob\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db\u3059\u308b\u3002\n        const reconstructedBlob = new Blob(arrayBufferList);\n\n        const testElement = document.getElementById(&#039;test&#039;);\n\n        console.log(&#039;imgElement.src = &#039;, imgElement.src);\n\n        if (imgElement.src) {\n          URL.revokeObjectURL(imgElement.src);\n          console.warn(&#039;URL.revokeObjectURL(imgElement.src)\u3092\u5b9f\u884c\u3057\u305f\u3002&#039;);\n        } else {\n          console.log(&#039;else imgElement.src = &#039;, imgElement.src);\n        }\n\n        \/\/ \u4ee5\u524d\u306e\u753b\u50cf\u3092\u30af\u30ea\u30a2\n        if (testElement) {\n          testElement.innerHTML = &#039;&#039;; \/\/ \u3059\u3079\u3066\u306e\u5b50\u8981\u7d20\u3092\u30af\u30ea\u30a2\n        }\n\n        imgElement.src = URL.createObjectURL(reconstructedBlob);\n\n        console.log(&#039;imgElement.src = &#039;, imgElement.src);\n\n        testElement.appendChild(imgElement);\n\n      }\n\n      const Button = document.getElementById(&#039;button&#039;);\n\n      \/\/ \u753b\u50cf\u306e\u5206\u89e3\u3068\u518d\u69cb\u6210\u3092\u5b9f\u884c\n      Button.addEventListener(&#039;click&#039;, () =&gt; getImage());\n\n    })();\n\n  &lt;\/script&gt;\n\n&lt;\/body&gt;\n\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<script type=\"text\/javascript\">\njQuery(function($){\n$(\".jp-video\").hide();\n});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>\u6b21\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u6307\u5b9a\u3057\u305fURL\u306e\u753b\u50cf\u3092\u5206\u89e3\u3057\u3066\u518d\u69cb\u6210\u3057\u3001\u30d6\u30e9\u30a6\u30b6\u306b\u8868\u793a\u3059\u308b\u3002fetch \u3092\u4f7f\u7528\u3057\u3066\u753b\u50cf\u3092\u53d6\u5f97\u3057\u3001Blob\u3092\u4f7f\u3063\u3066\u753b\u50cf\u3092\u5206\u5272\u3057\u3066\u518d\u69cb\u6210\u3059\u308b\u3002 \u3053\u306e\u30b3\u30fc\u30c9\u306f\u6b21\u306e\u95a2\u6570\u7b49\u3092\u5b66\u7fd2\u3059\u308b\u305f\u3081\u306e\u30b3\u30fc\u30c9\u3067\u3042\u308b\u3002fetch( [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-4478","post","type-post","status-publish","format-standard","hentry","category-javascript"],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/attacktube.com\/index.php?rest_route=\/wp\/v2\/posts\/4478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/attacktube.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/attacktube.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/attacktube.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/attacktube.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4478"}],"version-history":[{"count":12,"href":"https:\/\/attacktube.com\/index.php?rest_route=\/wp\/v2\/posts\/4478\/revisions"}],"predecessor-version":[{"id":4497,"href":"https:\/\/attacktube.com\/index.php?rest_route=\/wp\/v2\/posts\/4478\/revisions\/4497"}],"wp:attachment":[{"href":"https:\/\/attacktube.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/attacktube.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/attacktube.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}