Skip to content

Instantly share code, notes, and snippets.

@owyongsk
Last active November 22, 2022 03:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save owyongsk/5078d63a6a5439d428dd44a6cc289983 to your computer and use it in GitHub Desktop.
Save owyongsk/5078d63a6a5439d428dd44a6cc289983 to your computer and use it in GitHub Desktop.
A quick way to have Dropbox Public Folder for free using Cloudflare Workers! Inspired by https://github.com/owyongsk/chameleon.
/***
1. Create an app on your https://www.dropbox.com/developers/apps/create, choose "Dropbox API",
set permissions to "Apps folder", generate a token Refresh until image loads
2. Deploy this code to Cloudflare Workers.
3. Set your token as env variable DROPBOX_TOKEN in Cloudflare worker
4. Move all your files to your ~/Dropbox/Apps/'dropbox-app-name-earlier' folder
5. Look at your file at https://example.com/path/to/file.html if you have a
file ~/Dropbox/Apps/'dropbox-app-name-earlier'/path/to/file.html
***/
export default {
async fetch(request, env) {
const path = new URL(request.url).pathname;
// cf-connecting-ip header does not work in playground
if (path == "/") return new Response(request.headers.get('cf-connecting-ip'))
var response = await fetch('https://content.dropboxapi.com/2/files/download',{
headers: {
"Authorization": `Bearer ${env.DROPBOX_TOKEN}`,
"Dropbox-API-Arg": `{\"path\": \"${path}\"}`
}
});
const fileType = path.split(".").at(-1);
const contentType = new Map([
['html','text/html'],
['txt', 'text/plain'],
['css', 'text/css'],
['js', 'text/javascript'],
['vtt', 'text/vtt'],
['jpg', 'image/jpeg'],
['jpeg','image/jpeg'],
['png', 'image/png'],
['ico', 'image/x-icon'],
['pdf', 'application/pdf'],
['json','application/json'],
]).get(fileType) || 'application/octet-stream'
return new Response(
response.body,
{
headers: new Headers({
"content-type": contentType
}),
}
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment