Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ilijaz/2fd8ea52725254cbf9896dfa85e5e0d2 to your computer and use it in GitHub Desktop.
Save ilijaz/2fd8ea52725254cbf9896dfa85e5e0d2 to your computer and use it in GitHub Desktop.
Serve S3 images from your own domain using Cloudflare worker
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
/**
* When we receive a request, fetch it from our S3 bucket
*
* For example, a request for:
* https://mydomain.com/images/castle01.jpg
* will be fetched from:
* https://s3-de-central.profitbricks.com/my-images/test-folder/castle01.jpg
*/
async function handleRequest(request) {
// map our request folder to the s3 folder
let requestFolder = '/images'
let s3Folder = '/my-images/test-folder'
let url = new URL(request.url)
let origPathname = url.pathname
// fetch from the folder on our s3 bucket
url.hostname = 's3-de-central.profitbricks.com'
url.pathname = origPathname.replace(new RegExp('^'+escapeRegExp(requestFolder)), s3Folder)
return await fetch(url, request)
}
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\\/]/g, '\\$&'); // $& means the whole matched string
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment