You can unzip POST request bodies in Workers using the pako library.
# Download a gzipped file to send as the body of a POST request
# The Worker running on this route will decompress the file and
# echo the human-readable response. Sweet!
wget https://storage.franktaylor.io/d06cef5527f329e519553f649b3a76e219f2c9d6/admin.php.gz
curl "POST" "https://workers-unzip.cflr.workers.dev/" --data-binary @admin.php.gz -H 'Content-Type: application/gzip'
const pako = require('pako')
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest (request) {
request = new Request(request)
try {
let clone = request.clone()
clone = await clone.arrayBuffer()
clone = pako.inflate(clone, { to: 'string' })
return new Response(clone, {
headers: { 'content-type': 'text/plain' }
})
} catch (err) {
console.log(err)
return new Response(err)
}
}