From c1987237d05adcce77c614e5247a181ae5cdfacd Mon Sep 17 00:00:00 2001 From: Oleg Lobanov Date: Mon, 21 Feb 2022 19:59:22 +0100 Subject: [PATCH] feat: use real image path to calculate cache key --- files/file.go | 13 +++++++++++++ http/preview.go | 8 ++++---- http/resource.go | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/files/file.go b/files/file.go index 36852f39..569b0be4 100644 --- a/files/file.go +++ b/files/file.go @@ -185,6 +185,19 @@ func (i *FileInfo) Checksum(algo string) error { return nil } +func (i *FileInfo) RealPath() string { + if realPathFs, ok := i.Fs.(interface { + RealPath(name string) (fPath string, err error) + }); ok { + realPath, err := realPathFs.RealPath(i.Path) + if err == nil { + return realPath + } + } + + return i.Path +} + //nolint:goconst //TODO: use constants func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error { diff --git a/http/preview.go b/http/preview.go index 9860af91..163d7e49 100644 --- a/http/preview.go +++ b/http/preview.go @@ -91,7 +91,7 @@ func handleImagePreview( return errToStatus(err), err } - cacheKey := previewCacheKey(file.Path, file.ModTime.Unix(), previewSize) + cacheKey := previewCacheKey(file, previewSize) resizedImage, ok, err := fileCache.Load(r.Context(), cacheKey) if err != nil { return errToStatus(err), err @@ -142,7 +142,7 @@ func createPreview(imgSvc ImgService, fileCache FileCache, } go func() { - cacheKey := previewCacheKey(file.Path, file.ModTime.Unix(), previewSize) + cacheKey := previewCacheKey(file, previewSize) if err := fileCache.Store(context.Background(), cacheKey, buf.Bytes()); err != nil { fmt.Printf("failed to cache resized image: %v", err) } @@ -151,6 +151,6 @@ func createPreview(imgSvc ImgService, fileCache FileCache, return buf.Bytes(), nil } -func previewCacheKey(fPath string, fTime int64, previewSize PreviewSize) string { - return fmt.Sprintf("%x%x%x", fPath, fTime, previewSize) +func previewCacheKey(f *files.FileInfo, previewSize PreviewSize) string { + return fmt.Sprintf("%x%x%x", f.RealPath(), f.ModTime.Unix(), previewSize) } diff --git a/http/resource.go b/http/resource.go index ea4fbc29..9264f268 100644 --- a/http/resource.go +++ b/http/resource.go @@ -283,7 +283,7 @@ func writeFile(fs afero.Fs, dst string, in io.Reader) (os.FileInfo, error) { func delThumbs(ctx context.Context, fileCache FileCache, file *files.FileInfo) error { for _, previewSizeName := range PreviewSizeNames() { size, _ := ParsePreviewSize(previewSizeName) - if err := fileCache.Delete(ctx, previewCacheKey(file.Path, file.ModTime.Unix(), size)); err != nil { + if err := fileCache.Delete(ctx, previewCacheKey(file, size)); err != nil { return err } }