Skip to content

Instantly share code, notes, and snippets.

@fujohnwang
Forked from n1ru4l/index.js
Created May 25, 2024 01:37
Show Gist options
  • Save fujohnwang/a0a9fa8634f80df22e40c20808526046 to your computer and use it in GitHub Desktop.
Save fujohnwang/a0a9fa8634f80df22e40c20808526046 to your computer and use it in GitHub Desktop.
Fetch blob and convert to base64
export const fetchAsBlob = url => fetch(url)
.then(response => response.blob());
export const convertBlobToBase64 = blob => new Promise((resolve, reject) => {
const reader = new FileReader;
reader.onerror = reject;
reader.onload = () => {
resolve(reader.result);
};
reader.readAsDataURL(blob);
});
//fetchAsBlob(`https://fonts.gstatic.com/s/roboto/v16/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2`)
// .then(convertBlobToBase64)
// .then(console.log)
@fujohnwang
Copy link
Author

try {
                    const imageUrlToBase64 = async url => {
                        const response = await fetch(url);
                        const blob = await response.blob();
                        return new Promise((onSuccess, onError) => {
                            try {
                                const reader = new FileReader();
                                reader.onload = function () {
                                    onSuccess(this.result)
                                };
                                reader.readAsDataURL(blob);
                            } catch (e) {
                                onError(e);
                            }
                        });
                    };
                    const base64 = await imageUrlToBase64(avatarUrl)
                    const avatarBase64ImgSrc = `data:image/png;base64,${base64}`
                    await c.env.avatars.put(mail, avatarBase64ImgSrc)
                    return c.json({
                        email: mail,
                        avatar: avatarBase64ImgSrc
                    })
                } catch (e) {
                    console.log(`fallback to url instead of converting to base64`)
                    await c.env.avatars.put(mail, avatarUrl)
                    return c.json({
                        email: mail,
                        avatar: avatarUrl
                    })
                }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment