Skip to content

Instantly share code, notes, and snippets.

@lfjeff
Created June 11, 2018 03:09
Show Gist options
  • Select an option

  • Save lfjeff/cca9797f09acfba2140f95d8594df76d to your computer and use it in GitHub Desktop.

Select an option

Save lfjeff/cca9797f09acfba2140f95d8594df76d to your computer and use it in GitHub Desktop.

Revisions

  1. lfjeff created this gist Jun 11, 2018.
    29 changes: 29 additions & 0 deletions serve_s3_images_from_own_domain.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,29 @@
    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
    }