u
This commit is contained in:
@@ -214,13 +214,36 @@ async function handle(req, res) {
|
||||
if (!fs.existsSync(file)) {
|
||||
return send(res, 404, xml('<Error><Code>NoSuchKey</Code><Message>Not Found</Message></Error>'));
|
||||
}
|
||||
const data = fs.readFileSync(file);
|
||||
const stat = fs.statSync(file);
|
||||
const etag = etagFor(fs.readFileSync(file));
|
||||
const range = req.headers.range;
|
||||
if (range) {
|
||||
const match = /^bytes=(\d+)-(\d*)$/i.exec(range);
|
||||
if (match) {
|
||||
const start = Number(match[1]);
|
||||
const end = match[2] ? Number(match[2]) : stat.size - 1;
|
||||
if (start >= stat.size || end < start) {
|
||||
res.writeHead(416, { 'Content-Range': `bytes */${stat.size}` });
|
||||
return res.end();
|
||||
}
|
||||
const length = end - start + 1;
|
||||
res.writeHead(206, {
|
||||
'Content-Type': 'application/octet-stream',
|
||||
'Content-Length': length,
|
||||
'Content-Range': `bytes ${start}-${end}/${stat.size}`,
|
||||
'Accept-Ranges': 'bytes',
|
||||
ETag: etag,
|
||||
});
|
||||
return fs.createReadStream(file, { start, end }).pipe(res);
|
||||
}
|
||||
}
|
||||
res.writeHead(200, {
|
||||
'Content-Type': 'application/octet-stream',
|
||||
'Content-Length': data.length,
|
||||
ETag: etagFor(data),
|
||||
'Content-Length': stat.size,
|
||||
'Accept-Ranges': 'bytes',
|
||||
ETag: etag,
|
||||
});
|
||||
return res.end(data);
|
||||
return fs.createReadStream(file).pipe(res);
|
||||
}
|
||||
|
||||
if (req.method === 'HEAD' && key) {
|
||||
@@ -231,6 +254,7 @@ async function handle(req, res) {
|
||||
const stat = fs.statSync(file);
|
||||
return send(res, 200, '', {
|
||||
'Content-Length': stat.size,
|
||||
'Accept-Ranges': 'bytes',
|
||||
ETag: etagFor(fs.readFileSync(file)),
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user