mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 10:51:07 +00:00
cloudflare workers: ext and mime type based on header [#58]
This commit is contained in:
@@ -6,7 +6,9 @@ Use [rclone](https://rclone.org/downloads/) to upload your PMTiles archives to a
|
|||||||
|
|
||||||
Edit `wrangler.toml` with a new name + your development and production R2 buckets.
|
Edit `wrangler.toml` with a new name + your development and production R2 buckets.
|
||||||
|
|
||||||
Publish the worker: `npm deploy`
|
Test in development: `npm run start`
|
||||||
|
|
||||||
|
Publish the worker: `npm run deploy`
|
||||||
|
|
||||||
# Settings
|
# Settings
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import {
|
|||||||
Source,
|
Source,
|
||||||
RangeResponse,
|
RangeResponse,
|
||||||
ResolvedValueCache,
|
ResolvedValueCache,
|
||||||
|
TileType,
|
||||||
} from "../../../js";
|
} from "../../../js";
|
||||||
|
|
||||||
export interface Env {
|
export interface Env {
|
||||||
@@ -82,13 +83,41 @@ export default {
|
|||||||
const source = new R2Source(env, archive_name);
|
const source = new R2Source(env, archive_name);
|
||||||
const p = new PMTiles(source, CACHE);
|
const p = new PMTiles(source, CACHE);
|
||||||
|
|
||||||
|
let header = await p.getHeader();
|
||||||
|
|
||||||
|
for (const pair of [
|
||||||
|
[TileType.Mvt, "mvt"],
|
||||||
|
[TileType.Png, "png"],
|
||||||
|
[TileType.Jpeg, "jpg"],
|
||||||
|
[TileType.Webp, "webp"],
|
||||||
|
]) {
|
||||||
|
if (header.tileType === pair[0] && ext !== pair[1]) {
|
||||||
|
return new Response("Bad request: archive has type ." + pair[1], {
|
||||||
|
status: 400,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: optimize by checking header min/maxzoom
|
// TODO: optimize by checking header min/maxzoom
|
||||||
// TODO: enforce extensions and MIME type using header information
|
|
||||||
try {
|
try {
|
||||||
const tile = await p.getZxy(z, x, y);
|
const tile = await p.getZxy(z, x, y);
|
||||||
const headers = new Headers();
|
const headers = new Headers();
|
||||||
headers.set("Access-Control-Allow-Origin", "*"); // TODO: make configurable
|
headers.set("Access-Control-Allow-Origin", "*"); // TODO: make configurable
|
||||||
headers.set("Content-Type", "application/protobuf");
|
|
||||||
|
switch (header.tileType) {
|
||||||
|
case TileType.Mvt:
|
||||||
|
headers.set("Content-Type", "application/vnd.vector-tile");
|
||||||
|
break;
|
||||||
|
case TileType.Png:
|
||||||
|
headers.set("Content-Type", "image/png");
|
||||||
|
break;
|
||||||
|
case TileType.Jpeg:
|
||||||
|
headers.set("Content-Type", "image/jpeg");
|
||||||
|
break;
|
||||||
|
case TileType.Webp:
|
||||||
|
headers.set("Content-Type", "image/webp");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: optimize by making decompression optional
|
// TODO: optimize by making decompression optional
|
||||||
if (tile) {
|
if (tile) {
|
||||||
|
|||||||
Reference in New Issue
Block a user