前提・実現したいこと
inputフォームでURLの入力を受け付け、入力されたURLが画像か否かを判定したいです。
また、画像のURLの末尾が拡張子では無い画像のURLも存在するので、拡張子の有無で画像の判定は行なわない方法で、画像か否かを判定したいです。
試したこと・発生している問題
URLに画像の拡張子が無い場合もあるのでURLから判定するのは不可能と考え、getして帰ってきたレスポンスから画像か否かを判定する材料があるかもしれないと思い、とりあえずAxiosを使ってレスポンスを調べてみました。
下記はReactを使った動作デモです。
CodeSandBox
結果、レスポンスのヘッダーにcontent-type":"image/jpeg
というものが含まれていたので、image/jpegやimage/pngかどうかで、判定ができそうだと思いました。
しかしcontent-type
というプロパティ名にはハイフンが含まれており、content-type
の値を参照することができませんでした。
ただ、拡張子の有無を問わず画像か否かを判定できればよいので、上記の私が試した方法ではないアプローチでよいものがあれば、ご教示いただきたいです。
該当のソースコード
JavaScript
1export default function App() { 2 const [header, setHeader] = useState(""); 3 const [isImg, setIsImg] = useState(); 4 const checkImg = async ({ target: { value } }) => { 5 if (!value) return; 6 7 const res = await axios.get(value); 8 setHeader(JSON.stringify(res.headers)); 9 10 // 画像か否かを判定 11 // setIsImg() 12 }; 13 14 return ( 15 <div className="App"> 16 <div> 17 画像のURLサンプル 18 <input 19 type="text" 20 defaultValue="https://images.unsplash.com/photo-1651417060303-716ae896ef88?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxlZGl0b3JpYWwtZmVlZHw1fHx8ZW58MHx8fHw%3D&auto=format&fit=crop&w=500&q=60" 21 /> 22 </div> 23 <div> 24 画像のURL入力フォーム 25 <input type="url" onChange={checkImg} /> 26 </div> 27 <h2>画像か否かの判定結果</h2> 28 <p> 29 {isImg === true && "画像です。"} 30 {isImg === false && "画像ではありません。"} 31 </p> 32 <h2>ヘッダーのレスポンス</h2> 33 <pre>{header}</pre> 34 </div> 35 ); 36}
回答2件
あなたの回答
tips
プレビュー