Baseline Widely available
<input>
è¦ç´ ã® type="file"
åã¯ãã¦ã¼ã¶ã¼ãä¸ã¤ã¾ãã¯è¤æ°ã®ãã¡ã¤ã«ã端æ«ã®ã¹ãã¬ã¼ã¸ãã鏿ãããã¨ãã§ããããã«ãã¾ãã鏿ãããã¨ããã¡ã¤ã«ã¯ãã©ã¼ã æç¨¿ã使ç¨ãã¦ãµã¼ãã¼ã«ã¢ãããã¼ãããããJavaScript ã³ã¼ãã¨ãã¡ã¤ã« API ã使ç¨ãã¦æä½ããããããã¨ãã§ãã¾ãã
<label for="avatar">Choose a profile picture:</label>
<input type="file" id="avatar" name="avatar" accept="image/png, image/jpeg" />
label {
display: block;
font:
1rem "Fira Sans",
sans-serif;
}
input,
label {
margin: 0.4rem 0;
}
å¤
ãã¡ã¤ã«å
¥åæ¬ã® value
屿§ã«ã¯ã鏿ããããã¡ã¤ã«ã¸ã®ãã¹ã表ãæååãå
¥ãã¾ãããã¡ã¤ã«ã鏿ããã¦ããªãå ´åã¯ãå¤ã¯ç©ºæåå (""
) ã«ãªãã¾ããã¦ã¼ã¶ã¼ãè¤æ°ã®ãã¡ã¤ã«ã鏿ããã¨ãvalue
ã¯é¸æããããã¡ã¤ã«ã®ãªã¹ãã®ãã¡æåã®ãã¡ã¤ã«ã表ãã¾ãããã®ä»ã®ãã¡ã¤ã«ã¯ input è¦ç´ ã® HTMLInputElement.files
ããããã£ã使ã£ã¦å¾ããã¨ãã§ãã¾ãã
ã¡ã¢: æååã«ã¯å¸¸ã« C:\fakepath\
ã®æ¥é è¾ãä»ãããã¡ã¤ã«ã®å®éã®ãã¹ã«ã¯ãªãã¾ãããçãããã½ããã¦ã§ã¢ãã¦ã¼ã¶ã¼ã®ãã¡ã¤ã«æ§é ãæ¨æ¸¬ãããã¨ã鲿¢ããããã§ãã
ãã¹ã¦ã® <input>
ã«å
±éã®å±æ§ã«å ãã file
åã®å
¥åæ¬ã¯æ¬¡ã®å±æ§ã«ã対å¿ãã¦ãã¾ãã
accept
屿§ã®å¤ã¯æååã§ããã¡ã¤ã«å
¥åæ¬ãåãä»ãããã¡ã¤ã«åãå®ç¾©ãã¾ãããã®æååã¯ åºæãã¡ã¤ã«åæå®å ãã«ã³ãã§åºåã£ããªã¹ãã§ããæå®ããããã¡ã¤ã«åãè¤æ°ã®æ¹æ³ã§èå¥ããããã¨ãããã®ã§ãæå®ãããå½¢å¼ã®ãã¡ã¤ã«ãå¿
è¦ãªå ´åã¯ä¸é£ã®åæå®åãæä¾ããã¨ããã§ãããã
ä¾ãã°ã Microsoft Word ãã¡ã¤ã«ãèå¥ããæ¹æ³ãããã¤ãããã®ã§ã Word ãã¡ã¤ã«ãåãä»ãããµã¤ãã¯æ¬¡ã®ããã« <input>
ã使ç¨ãããã¨ãããã¾ãã
<input
type="file"
id="docpicker"
accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
capture
capture
屿§ã¯æååã§ã accept
屿§ã§å
¥åãç»åã¾ãã¯æ åãã¼ã¿ã§ããã¨ç¤ºããå ´åããããã®ãã¼ã¿ãåãè¾¼ãããã«ã©ã®ã«ã¡ã©ã使ç¨ããããæå®ãã¾ãã user
ã®å¤ã§ã¯ãã¦ã¼ã¶ã¼ã®æ¹ãåãã¦ããã«ã¡ã©ããã¤ã¯ã使ç¨ãã¾ãã environment
ã¯å¤å´ãåããã«ã¡ã©ããã¤ã¯ã使ç¨ãã¾ãããã®å±æ§ããªãå ´åãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã¯ä½ãããããèªåã§èªç±ã«æ±ºãã¾ããè¦æ±ãããæ¹åãæå¹ã§ã¯ãªãå ´åãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã¯æ¨å¥¨ãããæ¢å®ã®ã¢ã¼ãã§ä»£ç¨ãã¾ãã
ã¡ã¢: capture
ã¯ä»¥åã¯è«çå¤ã§ãããåå¨ããå ´åããã¡ã¤ã«å
¥åãè¦æ±ãã代ããã«ãã«ã¡ã©ããã¤ã¯ãªã©ãã®ç«¯æ«ã®ã¡ãã£ã¢åãè¾¼ã¿æ©å¨ã使ç¨ããããã«è¦æ±ãã¦ãã¾ããã
multiple
è«ç屿§ãæå®ããã¦ããã¨ããã¡ã¤ã«å
¥åæ¬ã¯ã¦ã¼ã¶ã¼ã«è¤æ°ã®ãã¡ã¤ã«ã鏿ãããã¨ã許ãã¾ãã
ä¸è¨ã«æãã屿§ã«å ãã以ä¸ã®æ¨æºå¤ã®å±æ§ãä¸é¨ã®ãã©ã¦ã¶ã¼ã§å©ç¨ã§ãã¾ããå®è£ ãã¦ããªããã©ã¦ã¶ã¼ã§ã¯ã³ã¼ããæ©è½ããå¯è½æ§ãå¶éããããããã§ããã°ä½¿ç¨ãããã¨ãé¿ãã¦ãã ããã
webkitdirectory
è«çåã® webkitdirectory
屿§ã¯ãããåå¨ããå ´åã¯ããã¡ã¤ã«é¸æã¤ã³ã¿ã¼ãã§ã¤ã¹ã§ã¦ã¼ã¶ã¼ããã£ã¬ã¯ããªã¼ã®ã¿ã鏿ãããã¨ãã§ãããã¨ã示ãã¾ãã詳ãã解説ã¨ä¾ã«ã¤ãã¦ã¯ HTMLInputElement.webkitdirectory
ãåç
§ãã¦ãã ããã
ã¡ã¢: webkitdirectory
ã¯ãã¨ã㨠WebKit ãã¼ã¹ã®ãã©ã¦ã¶ã¼åãã®ã¿ã«å®è£
ããããã®ã§ããã Firefox ã§ã使ç¨ã§ãã¾ããããããæ¯è¼çåºã対å¿ããã¦ãã¾ãããã¾ã æ¨æºã«ãªã£ã¦ããããä»£æ¿ææ®µããªãéãã¯ä½¿ç¨ããã¹ãã§ã¯ããã¾ããã
åºæãã¡ã¤ã«åæå®åã¯æååã§ã file
åã® <input>
è¦ç´ ã§ã¦ã¼ã¶ã¼ã鏿ãããã¨ãã§ãããã¡ã¤ã«ã®ç¨®é¡ãè¨è¿°ãã¾ããããããã®åºæãã¡ã¤ã«åæå®åã¯ã次ã®å½¢ã®ãã¡ä¸ã¤ãåããã¨ãã§ãã¾ãã
.jpg
, .pdf
, .doc
ãªã©ãaudio/*
ã§ãä»»æã®é³å£°ãã¡ã¤ã«ããæå³ãããvideo/*
ã§ãä»»æã®åç»ãã¡ã¤ã«ããæå³ãããimage/*
ã§ãä»»æã®ç»åãã¡ã¤ã«ããæå³ãããaccept
屿§ã¯ããããã®åºæãã¡ã¤ã«åæå®åã 1 ã¤ä»¥ä¸å«ãæååãåãã¾ããä¾ãã°ããã¡ã¤ã«é¸æãã¤ã¢ãã°ãç»åã¨ãã¦è¡¨ç¤ºãããã¨ãã§ããã³ã³ãã³ããå¿
è¦ã¨ãã¦ãããæ¨æºã®ç»åå½¢å¼ã¨ PDF ãã¡ã¤ã«ã®ä¸¡æ¹ãå«ããå ´åããã®ããã«ãªãã¾ãã
<input type="file" accept="image/*,.pdf" />
ãã¡ã¤ã«å
¥åæ¬ã®ä½¿ç¨ åºæ¬çãªä¾
<form method="post" enctype="multipart/form-data">
<div>
<label for="file">ã¢ãããã¼ããããã¡ã¤ã«ã鏿ãã¦ãã ãã</label>
<input type="file" id="file" name="file" multiple />
</div>
<div>
<button>éä¿¡</button>
</div>
</form>
div {
margin-bottom: 10px;
}
ããã¯ä»¥ä¸ã®ãããªåºåã«ãªãã¾ãã
ã¡ã¢: ãã®ä¾ã¯ GitHub ã«ãããã¾ãã â ã½ã¼ã¹ã³ã¼ãã¨ã©ã¤ãå®è¡ã確èªãã¦ãã ããã
ã¦ã¼ã¶ã¼ã®ç«¯æ«ããªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã«é¢ãããããã¡ã¤ã«å ¥åæ¬ã«ã¯ã¦ã¼ã¶ã¼ããã¡ã¤ã«ã鏿ãããã¨ãã§ãããã¡ã¤ã«é¸æãã¤ã¢ãã°ãéããã¿ã³ãããã¾ãã
ä¸è¨ã®ããã«ã multiple
屿§ãå«ããã¨ãè¤æ°ã®ãã¡ã¤ã«ãä¸åº¦ã«é¸æãããã¨ãã§ãããã¨ãæå®ãã¾ããã¦ã¼ã¶ã¼ã¯ãã¡ã¤ã«é¸æãã¤ã¢ãã°ããããã©ãããã©ã¼ã ãè¨±ãæ¹æ³ï¼ä¾ãã°ã Shift ã¾ã㯠Control ãæ¼ããªããã¯ãªãã¯ï¼ã«ãã£ã¦ãè¤æ°ã®ãã¡ã¤ã«ã鏿ã§ãã¾ããã¦ã¼ã¶ã¼ã« <input>
ããã 1 ã¤ã®ãã¡ã¤ã«ã鏿ããããå ´åã¯ã multiple
屿§ãçç¥ãã¦ãã ããã
鏿ããããã¡ã¤ã«ã¯ããã®è¦ç´ ã® HTMLInputElement.files
ããããã£ã§è¿ããããã㯠File
ãªãã¸ã§ã¯ãã®ãªã¹ããå«ã FileList
ãªãã¸ã§ã¯ãã§ãã FileList
ã¯é
åã®ããã«ãµãã¾ãã®ã§ã length
ããããã£ã使ç¨ãã¦é¸æããããã¡ã¤ã«ã®æ°ãåå¾ãããã¨ãã§ãã¾ãã
ããããã® File
ãªãã¸ã§ã¯ãã¯ä»¥ä¸ã®ãããªæ
å ±ãæã£ã¦ãã¾ãã
name
ãã¡ã¤ã«ã®ååã§ãã
lastModified
ãã¡ã¤ã«ãæå¾ã«å¤æ´ãããæ¥æãè¡¨ãæ°å¤ã§ã UNIX æå» (1970 å¹´ 1 æ 1 æ¥åå 0 æ) ããã®çµéããªç§æ°ã§ãã
lastModifiedDate
鿍奍;
ãã¡ã¤ã«ãæå¾ã«å¤æ´ãããæ¥æã表ã Date
ãªãã¸ã§ã¯ãã§ããããã¯éæ¨å¥¨ã§ãã使ãã¹ãã§ã¯ããã¾ããã代ããã« lastModified
ã使ç¨ãã¦ãã ããã
size
ãã¤ãæ°ã«ãããã¡ã¤ã«ãµã¤ãºã§ãã
type
ãã¡ã¤ã«ã® MIME ã¿ã¤ãã§ãã
webkitRelativePath
鿍æº
ãã£ã¬ã¯ããªã¼é¸æãã¤ã¢ãã° (ã¤ã¾ãã webkitdirectory
屿§ãè¨å®ããã¦ãã file
ãã¤ã¢ãã°) ã§é¸æããããã¼ã¹ãã£ã¬ã¯ããªã¼ããã®ãã¡ã¤ã«ã®ç¸å¯¾ãã¹ã表ãæååã§ããããã¯æ¨æºå¤ãªã®ã§ä½¿ç¨ããã«ã¯æ³¨æãã¦ãã ããã
ãµã¤ããã¦ã¼ã¶ã¼ãèªç±ãªå½¢å¼ã®ãã¡ã¤ã«ã鏿ã§ããããã«ã¯ããããªãã§ãããã代ããã«ãç¹å®ã®å½¢å¼ã®ãã¡ã¤ã«ã鏿ããããã§ããããä¾ãã°ããã¡ã¤ã«å ¥åæ¬ã§ã¦ã¼ã¶ã¼ã«ãããã£ã¼ã«ãã¡ã¤ã«ãã¢ãããã¼ããããã®ã§ããã°ããããã JPEG ã¾ã㯠PNG ã®ãããªã¦ã§ãã«äºææ§ãããç»åå½¢å¼ã鏿ããããã§ãããã
åä»å¯è½ãªãã¡ã¤ã«å½¢å¼ã¯ accept
屿§ã§ãåãä»ãããã¡ã¤ã«ã®æ¡å¼µåã¾ã㯠MIME ã¿ã¤ãããã¤ãä¾ã示ãã¾ãã
accept="image/png"
ã¾ã㯠accept=".png"
â PNG ãã¡ã¤ã«ãåãä»ãã¾ããaccept="image/png, image/jpeg"
ã¾ã㯠accept=".png, .jpg, .jpeg"
â PNG ã¾ã㯠JPEG ãã¡ã¤ã«ãåãä»ãã¾ããaccept="image/*"
â image/*
ã® MIME ã¿ã¤ãã§ããä»»æã®ãã¡ã¤ã«ãåãä»ãã¾ãã (å¤ãã®ã¢ãã¤ã«ç«¯æ«ã§ã¯ããã®å ´åã«ã¦ã¼ã¶ã¼ãã«ã¡ã©ã§åçãæ®ããã¨ãã§ããããã«ãªã£ã¦ãã¾ãã)accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"
â MS Word ææ¸ã¨æããããã¡ã¤ã«ããã¹ã¦åãä»ãã¾ãããã£ã¨è¤éãªä¾ãè¦ã¦ã¿ã¾ãããã
<form method="post" enctype="multipart/form-data">
<div>
<label for="profile_pic">ã¢ãããã¼ããããã¡ã¤ã«ã鏿ãã¦ãã ãã</label>
<input
type="file"
id="profile_pic"
name="profile_pic"
accept=".jpg, .jpeg, .png" />
</div>
<div>
<button>éä¿¡</button>
</div>
</form>
div {
margin-bottom: 10px;
}
ããã¯ååã®ä¾ã¨ä¼¼ãå¤è¦ã®åºåããã¾ãã
ã¡ã¢: ãã®ä¾ã¯ GitHub ã«ãããã¾ãã â ã½ã¼ã¹ã³ã¼ãã¨ã©ã¤ãå®è¡ã確èªãã¦ãã ããã
åãããã«è¦ããããããã¾ãããããã®å
¥åæ¬ã§ãã¡ã¤ã«ã鏿ãããã¨ããã¨ããã®ãã¡ã¤ã«é¸æãã¤ã¢ãã°ã§ã¯ accept
ã®å¤ã§æå®ããããã¡ã¤ã«å½¢å¼ãã鏿ã§ãã¾ããã (ç´°ããåãã¯ãã©ã¦ã¶ã¼ããªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã«ãã£ã¦ç°ãªãã¾ã)ã
accept
屿§ã¯é¸æããããã¡ã¤ã«ã®å½¢å¼ãæ¤è¨¼ãã¾ãããåã«ãã©ã¦ã¶ã¼ã«ã¦ã¼ã¶ã¼ãæ£ãããã¡ã¤ã«å½¢å¼ã鏿ããããã®ã¬ã¤ãããããã®ãã³ããåºãã ãã§ãã (å¤ãã®å ´å) ã¦ã¼ã¶ã¼ããã¡ã¤ã«é¸æãã¤ã¢ãã°ãªãã·ã§ã³ãåãæ¿ãããã¨ã§ããã¡ã¤ã«é¸æãã¤ã¢ãã°ããã®è¨å®ã䏿¸ããã¦ä»»æã®ãã¡ã¤ã«ã鏿ãããã¨ãã§ããã®ã§ã䏿£ãªãã¡ã¤ã«å½¢å¼ã鏿ããå¯è½æ§ãããã¾ãã
ãã®ããã accept
屿§ã¯é©åãªãµã¼ãã¼å´ã®æ¤è¨¼ã§ããã¯ã¢ããããå¿
è¦ããããã¨ãæèãã¦ããã¦ãã ããã
cancel
ã¤ãã³ãã¯ãã¦ã¼ã¶ã¼ã鏿ã夿´ãããåå鏿ãããã¡ã¤ã«ãå鏿ããå ´åã«çºè¡ããã¾ãã cancel
ã¤ãã³ãã¯ãã¡ã¤ã«ããã«ã¼ãã¤ã¢ãã°ã "cancel" ãã¿ã³ã escape ãã¼ã«ãã£ã¦éããããããåãæ¶ããããããå ´åã«ãçºè¡ããã¾ãã
ä¾ãã°ã次ã®ä¾ã¯ã¦ã¼ã¶ã¼ããã¡ã¤ã«ã鏿ããã«ãããã¢ãããéããå ´åã«ã³ã³ã½ã¼ã«ã«ãã°åºåãã¾ãã
const elem = document.createElement("input");
elem.type = "file";
elem.addEventListener("cancel", () => {
console.log("Cancelled.");
});
elem.addEventListener("change", () => {
if (elem.files.length == 1) {
console.log("File selected: ", elem.files[0]);
}
});
elem.click();
注
ã¹ã¯ãªãããããã¡ã¤ã«é¸æãã¤ã¢ãã°ã®å¤ãè¨å®ãããã¨ã¯ã§ãã¾ããã â 以ä¸ã®ããã«ãã¦ã广ã¯ããã¾ããã
const input = document.querySelector("input[type=file]");
input.value = "foo";
<input type="file">
ã使ç¨ãã¦ãã¡ã¤ã«ã鏿ãããå ´åãã»ãã¥ãªãã£ä¸ã®çç±ãããå
ã®ãã¡ã¤ã«ã¸ã®å®éã®ãã¹ã value
屿§ä¸ã§ã¯è¦ããªãããã«ãªã£ã¦ãã¾ãããã®ä»£ããã«ããã¡ã¤ã«åã®å
é ã« C:\fakepath\
ã追å ãããã®ã表示ããã¾ãããã®å¦ç½®ã«ã¯ããã¤ãã®çµç·¯ä¸ã®çç±ãããã¾ããããã¹ã¦ã®ææ°ã®ãã©ã¦ã¶ã¼ã§å¯¾å¿ããã¦ãããå®éã«ä»æ§æ¸ã§å®ç¾©ããã¦ãã¾ãã
ãã®ä¾ã§ã¯ããã®ä¾ã§ã¯ã HTMLInputElement.files
ããããã£ã§å©ç¨ã§ãããã¡ã¤ã«æ
å ±ãå©ç¨ãããããã«é«åº¦ãªãã¡ã¤ã«é¸æãã¤ã¢ãã°ã示ããã¾ãããã¤ãå·§å¦ãªãã¯ããã¯ã示ãã¾ãã
ã¡ã¢: ãã®ä¾ã®å®å ¨ãªã½ã¼ã¹ã³ã¼ã㯠GitHub â file-example.html (ã©ã¤ãçãããã¾ã) ã§è¦ããã¨ãã§ãã¾ãã CSS ã«ã¤ãã¦ã¯èª¬æãã¾ããã JavaScript ãä¸å¿ã§ãã
æåã«ã HTML ãè¦ã¦ã¿ã¾ãããã
<form method="post" enctype="multipart/form-data">
<div>
<label for="image_uploads"
>ã¢ãããã¼ãããç»åã鏿ãã¦ãã ãã (PNG, JPG)</label
>
<input
type="file"
id="image_uploads"
name="image_uploads"
accept=".jpg, .jpeg, .png"
multiple />
</div>
<div class="preview">
<p>ã¢ãããã¼ããããã¡ã¤ã«ã鏿ããã¦ãã¾ãã</p>
</div>
<div>
<button>éä¿¡</button>
</div>
</form>
html {
font-family: sans-serif;
}
form {
background: #ccc;
margin: 0 auto;
padding: 20px;
border: 1px solid black;
}
form ol {
padding-left: 0;
}
form li,
div > p {
background: #eee;
display: flex;
justify-content: space-between;
margin-bottom: 10px;
list-style-type: none;
border: 1px solid black;
}
form img {
height: 64px;
order: 1;
}
form p {
line-height: 32px;
padding-left: 10px;
}
form label,
form button {
background-color: #7f9ccb;
padding: 5px 10px;
border-radius: 5px;
border: 1px ridge black;
font-size: 0.8rem;
height: auto;
}
form label:hover,
form button:hover {
background-color: #2d5ba3;
color: white;
}
form label:active,
form button:active {
background-color: #0d3f8f;
color: white;
}
ããã¯ä»¥åè¦ããã®ã«ä¼¼ã¦ãã¾ããç¹çããã¹ããã®ã¯ããã¾ããã
次ã«ã JavaScript ãä¸éãè¦ã¦ã¿ã¾ãããã
ã¹ã¯ãªããã®æåã®è¡ã§ããã©ã¼ã ã®å
¥åæ¬èªä½ã¨ .preview
ã¯ã©ã¹ãè¨å®ããã <div>
è¦ç´ ã®åç
§ãåå¾ãã¾ããæ¬¡ã« <input>
è¦ç´ ãé表示ã«ãã¾ãã â ããã¯ããã¡ã¤ã«å
¥åæ¬ãæ¦ãã¦éããã¹ã¿ã¤ã«ä»ããããã®ãé£ããããã©ã¦ã¶ã¼éã§ãã¶ã¤ã³ã«ä¸è²«æ§ããªãããã§ãã <label>
ãã¯ãªãã¯ãããã¨ã§ input
è¦ç´ ãã¢ã¯ãã£ãåãããã¨ãã§ããã®ã§ã input
è¦ç´ ãè¦ããã¯é表示ã«ãã¦ã©ãã«ããã¿ã³ãããããã»ãããã¦ã¼ã¶ã¼ããã¡ã¤ã«ãã¢ãããã¼ããããã¨ãã®æä½ãåããã¾ãã
const input = document.querySelector("input");
const preview = document.querySelector(".preview");
input.style.opacity = 0;
ã¡ã¢: ãã¡ã¤ã«å
¥åæ¬ãé表示ã«ããããã« opacity
ã使ç¨ãã visibility: hidden
ã display: none
ã使ç¨ããªãã®ã¯ãæ¯æ´æè¡ãå¾äºè
ã®ãã¡ã¤ã«å
¥åæ¬ã対話å¯è½ã§ã¯ãªãã¨è§£éããããã§ãã
次ã«ãã¤ãã³ããªã¹ãã¼ãå
¥åæ¬ã«è¿½å ãã¦ã鏿ãããå¤ã®å¤å (ãã®å ´åããã¡ã¤ã«ã鏿ããããã¨) ãç£è¦ãã¾ããã¤ãã³ããªã¹ãã¼ã¯ç¬èªã® updateImageDisplay()
颿°ãå¼ã³åºãã¾ãã
input.addEventListener("change", updateImageDisplay);
updateImageDisplay()
颿°ãå¼ã³åºããããã³ã«ã以ä¸ã®ãã¨ãè¡ãã¾ãã
while
ã«ã¼ãã使ã£ã¦ãã¬ãã¥ã¼ã® <div>
ã®ä¸ã«ãã以åã®ã³ã³ãã³ãã空ã«ãã¾ãã
鏿ããããã¹ã¦ã®ãã¡ã¤ã«ã®æ
å ±ãæã¤ FileList
ãªãã¸ã§ã¯ããåãã curFiles
ã¨å¼ã°ãã夿°ã«ä¿åãã¾ãã
curFiles.length
ã 0 ãã©ããããã§ãã¯ãããã¨ã§ããã¡ã¤ã«ã鏿ããã¦ããªããã確èªãã¾ãã鏿ããã¦ããªãå ´åã¯ããã¬ãã¥ã¼ã® <div>
ã«é¸æããã¦ãããã¡ã¤ã«ããªãæ¨ã®ã¡ãã»ã¼ã¸ã表示ãã¾ãã
ãã¡ã¤ã«ã鏿ããã¦ããå ´åãã«ã¼ãã§ 1 ã¤ãã¤ããã¬ãã¥ã¼ã® <div>
ã«ããã«ã¤ãã¦ã®æ
å ±ã表示ãã¾ããç¹çããã¹ãã¯æ¬¡ã§ãã
ç¬èªã® validFileType()
颿°ã使ç¨ãã¦ããã¡ã¤ã«ãæ£ããå½¢å¼ (ã¤ã¾ãã accept
屿§ã§æå®ãããç»åå½¢å¼) ã§ãããã©ããããã§ãã¯ãã¾ãã
ããã§ãããªããæ¬¡ã®ãã¨ãè¡ãã¾ãã
<div>
(file.name
ããã³ file.size
ã§åå¾) å
ã®ãªã¹ãã¢ã¤ãã ã«åºåãã¾ããç¬èªã® returnFileSize()
颿°ã¯ãã¡ã¤ã«ãµã¤ãºã ãã¤ã/KB/MB ã®ãã¡é©åãªå½¢å¼ã§è¿ãã¾ã (æ¢å®ã§ãã©ã¦ã¶ã¼ã¯é·ãã絶対çãªãã¤ãã§è¿ãã¾ã)ãURL.createObjectURL(file)
ãå¼ã³åºãã¦ãç»åã®ãã¬ãã¥ã¼ã®ãµã ãã¤ã«ãçæãã¾ããæ¬¡ã«ãæ°ãã <img>
ãçæãããã® src
ããµã ãã¤ã«ã«è¨å®ãããã¨ã§ããªã¹ãé
ç®ã«ãç»åãæ¿å
¥ãã¾ãããã¡ã¤ã«å½¢å¼ãç¡å¹ã§ããå ´åããªã¹ãã®ã¢ã¤ãã å ã«ã¡ãã»ã¼ã¸ã表示ãã¦ãã¦ã¼ã¶ã¼ã«å¥ãªãã¡ã¤ã«å½¢å¼ã鏿ããå¿ è¦ããããã¨ãä¼ãã¾ãã
function updateImageDisplay() {
while (preview.firstChild) {
preview.removeChild(preview.firstChild);
}
const curFiles = input.files;
if (curFiles.length === 0) {
const para = document.createElement("p");
para.textContent = "ã¢ãããã¼ããããã¡ã¤ã«ã鏿ããã¦ãã¾ãã";
preview.appendChild(para);
} else {
const list = document.createElement("ol");
preview.appendChild(list);
for (const file of curFiles) {
const listItem = document.createElement("li");
const para = document.createElement("p");
if (validFileType(file)) {
para.textContent = `ãã¡ã¤ã«å: ${file.name}, ãã¡ã¤ã«ãµã¤ãº: ${returnFileSize(
file.size,
)}.`;
const image = document.createElement("img");
image.src = URL.createObjectURL(file);
image.alt = image.title = file.name;
listItem.appendChild(image);
listItem.appendChild(para);
} else {
para.textContent = `ãã¡ã¤ã«å: ${file.name}: ãã¡ã¤ã«å½¢å¼ãæå¹ã§ã¯ããã¾ããã鏿ããªããã¦ãã ããã`;
listItem.appendChild(para);
}
list.appendChild(listItem);
}
}
}
ç¬èªã® validFileType()
颿°ã¯ File
ãªãã¸ã§ã¯ãã弿°ã¨ãã¦åãããããã Array.prototype.includes()
ã使ç¨ãã¦ã fileTypes
ã®ä¸ã®å¤ã«ãã¡ã¤ã«ã® type
ããããã£ã«ä¸è´ãããã®ããããã©ããããã§ãã¯ãã¾ããä¸è´ãããã®ãè¦ã¤ãã£ãå ´åã¯ã颿°ã¯ true
ãè¿ãã¾ããä¸è´ãããã®ãè¦ã¤ãããªããã°ã false
ãè¿ãã¾ãã
// https://developer.mozilla.org/ja/docs/Web/Media/Guides/Formats/Image_types
const fileTypes = [
"image/apng",
"image/bmp",
"image/gif",
"image/jpeg",
"image/pjpeg",
"image/png",
"image/svg+xml",
"image/tiff",
"image/webp",
"image/x-icon",
];
function validFileType(file) {
return fileTypes.includes(file.type);
}
returnFileSize()
颿°ã¯æ°å¤ï¼ç¾å¨ã®ãã¡ã¤ã«ã® size
ããããã£ããåå¾ãããã¤ãæ°ï¼ãåãããã¤ã/KB/MB ã®ãã¡é©åãªå½¢å¼ã§è¿ãã¾ãã
function returnFileSize(number) {
if (number < 1e3) {
return `${number} ãã¤ã`;
} else if (number >= 1e3 && number < 1e6) {
return `${(number / 1e3).toFixed(1)} KB`;
} else {
return `${(number / 1e6).toFixed(1)} MB`;
}
}
ã¡ã¢: ããã§ä½¿ç¨ããã¦ãã "KB" ããã³ "MB" ã®åä½ã¯ã1KB = 1000B ã¨ãã SI æ¥é è¾ã®æ
£ä¾ã«å¾ã£ã¦ãããmacOS ã¨åæ§ã§ããã·ã¹ãã ãç°ãªãã¨ããã¡ã¤ã«ãµã¤ãºã®è¡¨ãæ¹ãç°ãªãã¾ããä¾ãã°ãUbuntu ã§ã¯ 1KiB = 1024B ã¨ãã IEC æ¥é è¾ã使ç¨ãã¦ãã¾ãããRAM ã®ä»æ§ã§ã¯ 2 ã®ã¹ãä¹ã表ã SI æ¥é è¾ (1KB = 1024B) ããã使ããã¾ãããã®ãããããã§ã¯ 1e3
(1000
) ã 1e6
(100000
) ã 1024
ã 1048576
ã®ä»£ããã«ä½¿ç¨ãã¾ããã ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ãæ£ç¢ºãªãµã¤ãºãéè¦ã§ããå ´åã¯ãã¦ã¼ã¶ã¼ã«åä½ç³»ãæç¢ºã«ä¼ããå¿
è¦ãããã¾ãã
const button = document.querySelector("form button");
button.addEventListener("click", (e) => {
e.preventDefault();
const para = document.createElement("p");
para.append("ç»åãã¢ãããã¼ãããã¾ããã");
preview.replaceChildren(para);
});
ãã®ä¾ã¯æ¬¡ã®ããã«ã§ãã¾ãã使ã£ã¦ã¿ã¾ãããã
æè¡çæ¦è¦ 仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ å ±<input type="file">
ããã³ãã¡ã¤ã« API ã«é¢ããããããã®æç¨ãªä¾ãå«ã¾ãã¦ãã¾ããRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4