More robust actor image lazy load
This commit is contained in:
parent
a9fbc2aaa1
commit
79db409a41
2 changed files with 22 additions and 2 deletions
|
@ -48,7 +48,7 @@ export {
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
async function getActorImage (req: express.Request, res: express.Response) {
|
async function getActorImage (req: express.Request, res: express.Response, next: express.NextFunction) {
|
||||||
const filename = req.params.filename
|
const filename = req.params.filename
|
||||||
|
|
||||||
if (actorImagePathUnsafeCache.has(filename)) {
|
if (actorImagePathUnsafeCache.has(filename)) {
|
||||||
|
@ -78,7 +78,23 @@ async function getActorImage (req: express.Request, res: express.Response) {
|
||||||
const path = image.getPath()
|
const path = image.getPath()
|
||||||
|
|
||||||
actorImagePathUnsafeCache.set(filename, path)
|
actorImagePathUnsafeCache.set(filename, path)
|
||||||
return res.sendFile(path, { maxAge: STATIC_MAX_AGE.LAZY_SERVER })
|
|
||||||
|
return res.sendFile(path, { maxAge: STATIC_MAX_AGE.LAZY_SERVER }, (err: any) => {
|
||||||
|
if (!err) return
|
||||||
|
|
||||||
|
// It seems this actor image is not on the disk anymore
|
||||||
|
if (err.status === HttpStatusCode.NOT_FOUND_404 && !image.isOwned()) {
|
||||||
|
logger.error('Cannot lazy serve actor image %s.', filename, { err })
|
||||||
|
|
||||||
|
actorImagePathUnsafeCache.del(filename)
|
||||||
|
|
||||||
|
image.onDisk = false
|
||||||
|
image.save()
|
||||||
|
.catch(err => logger.error('Cannot save new actor image disk state.', { err }))
|
||||||
|
}
|
||||||
|
|
||||||
|
return next(err)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getPreview (req: express.Request, res: express.Response) {
|
async function getPreview (req: express.Request, res: express.Response) {
|
||||||
|
|
|
@ -98,4 +98,8 @@ export class ActorImageModel extends Model<Partial<AttributesOnly<ActorImageMode
|
||||||
const imagePath = join(CONFIG.STORAGE.ACTOR_IMAGES, this.filename)
|
const imagePath = join(CONFIG.STORAGE.ACTOR_IMAGES, this.filename)
|
||||||
return remove(imagePath)
|
return remove(imagePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isOwned () {
|
||||||
|
return !this.fileUrl
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue