Base content-length on stat instead of saved value

This commit is contained in:
rijkvanzanten
2021-02-18 13:33:03 -05:00
parent 1ecedf5d44
commit f9685b0d4a
2 changed files with 18 additions and 9 deletions

View File

@@ -119,12 +119,13 @@ router.get(
}
}
const { stream, file } = await service.getAsset(req.params.pk, transformation, range);
const { stream, file, stat } = await service.getAsset(req.params.pk, transformation, range);
if (req.method.toLowerCase() === 'head') {
res.status(200);
res.setHeader('Accept-Ranges', 'bytes');
res.setHeader('Content-Length', file.filesize);
res.setHeader('Content-Length', stat.size);
return res.end();
}
@@ -136,12 +137,11 @@ router.get(
res.setHeader('Cache-Control', `${access}, max-age=${ms(env.ASSETS_CACHE_TTL as string)}`);
if (range) {
res.setHeader('Content-Range', `bytes ${range.start}-${range.end || file.filesize - 1}/${file.filesize}`);
res.setHeader('Content-Range', `bytes ${range.start}-${range.end || stat.size - 1}/${stat.size}`);
res.status(206);
res.setHeader('Content-Length', (range.end ? range.end + 1 : file.filesize) - range.start);
res.setHeader('Content-Length', (range.end ? range.end + 1 : stat.size) - range.start);
} else {
res.setHeader('Content-Length', file.filesize);
res.setHeader('Content-Length', stat.size);
}
if (req.query.hasOwnProperty('download') === false) {

View File

@@ -52,7 +52,11 @@ export class AssetsService {
const { exists } = await storage.disk(file.storage).exists(assetFilename);
if (exists) {
return { stream: storage.disk(file.storage).getStream(assetFilename, range), file };
return {
stream: storage.disk(file.storage).getStream(assetFilename, range),
file,
stat: await storage.disk(file.storage).getStat(assetFilename),
};
}
const readStream = storage.disk(file.storage).getStream(file.filename_disk, range);
@@ -60,10 +64,15 @@ export class AssetsService {
await storage.disk(file.storage).put(assetFilename, readStream.pipe(transformer));
return { stream: storage.disk(file.storage).getStream(assetFilename, range), file };
return {
stream: storage.disk(file.storage).getStream(assetFilename, range),
stat: await storage.disk(file.storage).getStat(assetFilename),
file,
};
} else {
const readStream = storage.disk(file.storage).getStream(file.filename_disk, range);
return { stream: readStream, file };
const stat = await storage.disk(file.storage).getStat(file.filename_disk);
return { stream: readStream, file, stat };
}
}