加一個 Pages Function(functions/models/[id]/video.mp4.js)攔下影片請求,讀出檔案後依 Range 切出那一段,回 206、Content-Range 和正確的 Content-Length;範圍不合法就回 416。第一版想用串流省記憶體,但 next() 拿到的回應沒有 Content-Length,算不出檔案多大,所以改成先讀成 ArrayBuffer 再切。用 curl 驗證,要看到 206 1000:
curl -s -o /dev/null -w "%{http_code} %{size_download}\n" -H "Range: bytes=1000-1999" https://howdidai.com/models/v12/video.mp4
代價是每次請求都要讀整個檔案,流量變大之前要把影片搬到 R2 或 YouTube。