Fetch API を使って画像データなどを取得してダウンロードする
こんにちは、いわむらです
もうすぐIEのサポートを終了するということもあり色々と利用できるものが増えるなと思っています
その中でも使う頻度が増えそうなFetchを利用して画像データを取得しそれをダウンロードする処理をこの間試しに書いたのでそれを今回書こうかなと思います
今回利用するFetchについてはMDNに詳細が書いてあるのでそちらを確認してもらえればと思います
自分の方で作った処理がこんな感じになります
// TypeScript
const sampleUrl = `https://source.unsplash.com/EZpGDYWBAYA`
const downloadFile = async (url: string): Promise<void> => {
try {
const response = await fetch(url)
const blob = await response.blob()
const downloadTag = document.createElement('a')
downloadTag.href = URL.createObjectURL(blob)
downloadTag.download = `sample.png`
downloadTag.click()
} catch (error: AnyForError) {
console.error(error.message)
}
}
downloadFile(sampleUrl)
sampleUrlはダウンロード先が必要だったのでunsplash.comを利用しています
処理の流れとしてはfetchで特にGETなどのリクエストを指定しないとデフォルトでGETリクエストになるため特に指定はせずfetchの引数にurlだけ渡しています
レスポンスが返ってきたら返ってきた内容をblob型にしています
ダウンロードするためにまずaタグを作成します
そしてブラウザ内にあるblobのメモリ位置をURLにしてそれをダウンロードのhrefにしています
ダウンロードするときにはファイル名を指定したいのでdownload属性を指定します。今回はサンプルなのでsample.pngとしておきます
あとは作成したaタグを擬似的にクリックさせればブラウザでダウンロードが開始されるという感じの流れになっています
axiosとかを入れなくても比較的簡単に書けるのでパッケージを削りたい場合などにはどんどん使っていきたいなと思います
今回は以上です!読んでいただきありがとうございました!