fix: content-length is lost
Massimo Melina committed
Jan 14, 2022 at 21:33 UTC
05dd943b9932ebaceab35d404edb22c2269a46bb
2 files changed
+10
-3
src/serveFile.ts
+7
-3
@@ -40,8 +40,11 @@ export function serveFile(source:string, mime?:string) : Koa.Middleware {
40
ctx.status = 200
41
if (ctx.fresh)
42
return ctx.status = 304
43
- if (!range)
44
- return ctx.body = createReadStream(source)
43
+ if (!range) {
44
+ ctx.body = createReadStream(source)
45
+ ctx.response.length = stats.size
46
+ return
47
+ }
48
const ranges = range.split('=')[1]
49
if (ranges.includes(','))
50
return ctx.throw(400, 'multi-range not supported')
@@ -49,7 +52,7 @@ export function serveFile(source:string, mime?:string) : Koa.Middleware {
52
if (!bytes?.length)
53
return ctx.throw(400, 'bad range')
54
const max = stats.size - 1
52
- let start = Number(bytes[0])
55
+ let start = Number(bytes[0]) || 0
56
let end = Number(bytes[1]) || max
57
if (end > max || start > max) {
58
ctx.status = 416
@@ -60,5 +63,6 @@ export function serveFile(source:string, mime?:string) : Koa.Middleware {
63
ctx.status = 206
64
ctx.set('Content-Range', `bytes ${start}-${end}/${stats.size}`)
65
ctx.body = createReadStream(source, { start, end })
66
+ ctx.response.length = end - start + 1
67
}
68
}
src/throttler.ts
+3
@@ -29,6 +29,9 @@ export function throttler(): Koa.Middleware {
29
if (!--ipGroup.count) // any left?
30
delete ip2group[ctx.ip]
31
})
32
+ const bak = ctx.response.length // preserve
33
ctx.body = ctx.body.pipe(ts)
34
+ if (bak)
35
+ ctx.response.length = bak
36
}
37
}