base64ã¨ã³ã³ã¼ãå½¢å¼ã®æååãã¼ã¿ããã¼ã¸ã«åãè¾¼ã
æ¦è¦
S3ã®ãã©ã¤ãã¼ããã±ããã«ä¿ç®¡ããã¦ããç»åã表示ãããã
S3ãããªãã¸ã§ã¯ããåå¾ãããããbase64ã¨ã³ã³ã¼ããããã®ãData URLã使ç¨ãã¦ãã©ã¦ã¶ã«åãè¾¼ã¿ãç»åã表示ãããã¨ãè¡ãªã£ãã®ã§
ãããã¡ã¢ã¨ãã¦æ®ãã¾ãã
Data URL ã¨ã¯
Data URL 㯠data: ã¹ãã¼ã ãå
é ã«ã¤ããURLã§ããã¼ã¿ãã¤ã³ã©ã¤ã³ã§ææ¸ã«åãè¾¼ããã¨ãã§ãã¾ãã
ã¹ãã¼ã (data:)ãMIMEã¿ã¤ããbase64ãã¼ã¯ã³ããã¼ã¿èªä½ã®4ã¤ã®é¨åã§æ§æããã¾ãã
data:[<mediatype>][;base64],<data>
ãã¼ã¿ãæåã®å ´åã¯ããã®ã¾ã¾æå®ãããã¨ãã§ãã¾ãã
æå以å¤ã§ããã°ãbase64
ãæå®ãã base64ã¨ã³ã³ã¼ããããã¤ããªã¼ãã¼ã¿ãæå®ãã¾ãã
Data URIã¹ãã¼ã ã«å¯¾å¿ãããã©ã¦ã¶ããbase64ã¨ã³ã³ã¼ãããããã¼ã¿ããã³ã¼ããããããå±éãã¦ãããããã
ä¾ã¨ãã¦PNGã®ç»åãbase64ã¨ã³ã³ã¼ãããData URIã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
image_tag "data:image/png;base64, #{image_data}"
image_data
ã®é¨åã¯ãbase64ã¨ã³ã³ã¼ãããããã¼ã¿ãã®ãã®ãå
¥ãã¾ãã
base64ã¨ã³ã³ã¼ãã¨ã¯
base64ã¯ããã¼ã¿ã64種é¡ã®å°åå¯è½ãªè±æ°åã®ã¿ãç¨ãã¦ããã«ããã¤ãæåããã¤ããªãã¼ã¿ãæ±ãããã®ã¨ã³ã³ã¼ãæ¹å¼ã§ãã
å
·ä½çã«ã¯ãAãâ¦ãZãaãâ¦ãzã0ãâ¦ã9ã+ã/ ã§ãã¼ã¿ãå¤æããã¦ãã¾ãã
base64ã¨ã³ã³ã¼ãæ¹å¼ã¯ãASCIIããã¹ãããæ±ããªãã¡ãã£ã¢ä¸ã§ä¿åãéä¿¡ãè¡ãéã«ããã¼ã¿ãå¤æããããã«ä½¿ç¨ããã¦ã¾ãã
base64ãå®ããããçµç·¯ã¨ãã¦ããã¤ã¦é»åã¡ã¼ã«ãéä¿¡ããéã«SMTPãããã³ã«ã§ã¯ASCIIã§è¡¨ç¾ãããè±æ°åããéä¿¡ãããã¨ãã§ããªãã£ãããç»åãªã©ã®ããã¹ã以å¤ã®ãã¼ã¿ãæ±ãããã«ASCIIã¸ã®å¤ææ¹æ³ãå®ãããã¾ããã
Data URL ã§ç»åã表示ãããã¨ã«ã¤ãã¦ã®æ³¨æç¹
- ãã©ã¦ã¶ã«ãã£ã¦URLã®æåæ°ã«å¶éãè¨ãããã¦ãã¾ãã
データ URL - URI | MDN - base64ã¨ã³ã³ã¼ããã¦åãè¾¼ãã¨ãå½ç¶ã§ãã imgã¿ã°ã§srcã«ç»åãã¹ãæå®ããããããã½ã¼ã¹ã³ã¼ãèªä½ãé·ããªãã¾ãããã®ããåãè¾¼ãç»åã®åã ããã¼ã¸ãµã¤ãºã大ãããªãã¾ãããã¼ã¿è»¢ééãå¢å ãããããç»åãåãè¾¼ãã ãã¡ã¤ã«ã®ãã¦ã³ãã¼ãã«æéããããå¯è½æ§ãããã¾ãã
å®éã®ã³ã¼ã
s3 = Aws::S3::Resource.new(client: s3_client) object = s3.bucket(Settings.s3.bucket_name).object(prefix: "uploads/image") image_data = Base64.encode64(object.get.body.read)
object.get.body.read
ã®é¨åã«ã¤ãã¦ã
getã¡ã½ããã§ãªãã¸ã§ã¯ããåå¾ããbodyã¡ã½ããã§ãªãã¸ã§ã¯ãã®ä¸èº«ãåç
§ãã¾ãã以ä¸ã®ããã«ãã¤ãåãã¼ã¿ãæ±ãã¹ããªã¼ã ã¨ãªã£ã¦ãã¾ãã
pry > object.get.body.class
=> StringIO
æååã¨ãã¦æ±ãããã«ã¯ã¹ããªã¼ã ãã read ãã¦æåååã«å¤æããå¿ è¦ãããã¾ãã
pry > object.get.body.read.class => String
ãã¥ã¼å´ã§ã®è¨è¿°ã§ãã
image_tag "data:image/jpeg;base64, #{image_data}"
ã¡ãªã¿ã«ãobject.get.body.read ã§æååã«ããå¾ãã®ã¾ã¾dataURLã«åãè¾¼ããã¨ãã§ããã®ãã¨æãã
base64ã¨ã³ã³ã¼ãããã«ãã¥ã¼å´ã«è¿ã㨠Invalid byte sequence in UTF-8
ã¨ã¨ã©ã¼ã«ãªã£ã¦ãã¾ãã¾ããã
ãããããdataURLã解éã§ããªãæååãå«ã¾ãã¦ãããããå¥é追å å¦çï¼ã¨ã¹ã±ã¼ãï¼ï¼ãå¿
è¦ãããããªãã¨æãã¾ãã
åèã«ããURL
データ URL - URI | MDN
Base64 - Wikipedia
Base64についてまとめてみた - iimon TECH BLOG