use fullpath as a identifier

This commit is contained in:
niubility000 2021-12-17 09:51:59 +08:00 committed by GitHub
parent 4a5f8a017d
commit 3dab4982d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 13 deletions

View File

@ -7,7 +7,6 @@ import (
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
"path/filepath"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/filebrowser/filebrowser/v2/files" "github.com/filebrowser/filebrowser/v2/files"
@ -61,7 +60,7 @@ func previewHandler(imgSvc ImgService, fileCache FileCache, enableThumbnails, re
switch file.Type { switch file.Type {
case "image": case "image":
return handleImagePreview(w, r, imgSvc, fileCache, file, previewSize, enableThumbnails, resizePreview) return handleImagePreview(w, r, d, imgSvc, fileCache, file, previewSize, enableThumbnails, resizePreview)
default: default:
return http.StatusNotImplemented, fmt.Errorf("can't create preview for %s type", file.Type) return http.StatusNotImplemented, fmt.Errorf("can't create preview for %s type", file.Type)
} }
@ -71,6 +70,7 @@ func previewHandler(imgSvc ImgService, fileCache FileCache, enableThumbnails, re
func handleImagePreview( func handleImagePreview(
w http.ResponseWriter, w http.ResponseWriter,
r *http.Request, r *http.Request,
d *data,
imgSvc ImgService, imgSvc ImgService,
fileCache FileCache, fileCache FileCache,
file *files.FileInfo, file *files.FileInfo,
@ -91,13 +91,13 @@ func handleImagePreview(
return errToStatus(err), err return errToStatus(err), err
} }
cacheKey := previewCacheKey(file.Path, file.ModTime.Unix(), previewSize) cacheKey := previewCacheKey(file.Path, file.ModTime.Unix(), previewSize, d)
resizedImage, ok, err := fileCache.Load(r.Context(), cacheKey) resizedImage, ok, err := fileCache.Load(r.Context(), cacheKey)
if err != nil { if err != nil {
return errToStatus(err), err return errToStatus(err), err
} }
if !ok { if !ok {
resizedImage, err = createPreview(imgSvc, fileCache, file, previewSize) resizedImage, err = createPreview(imgSvc, d, fileCache, file, previewSize)
if err != nil { if err != nil {
return errToStatus(err), err return errToStatus(err), err
} }
@ -109,7 +109,7 @@ func handleImagePreview(
return 0, nil return 0, nil
} }
func createPreview(imgSvc ImgService, fileCache FileCache, func createPreview(imgSvc ImgService, d *data, fileCache FileCache,
file *files.FileInfo, previewSize PreviewSize) ([]byte, error) { file *files.FileInfo, previewSize PreviewSize) ([]byte, error) {
fd, err := file.Fs.Open(file.Path) fd, err := file.Fs.Open(file.Path)
if err != nil { if err != nil {
@ -142,7 +142,7 @@ func createPreview(imgSvc ImgService, fileCache FileCache,
} }
go func() { go func() {
cacheKey := previewCacheKey(file.Path, file.ModTime.Unix(), previewSize) cacheKey := previewCacheKey(file.Path, file.ModTime.Unix(), previewSize, d)
if err := fileCache.Store(context.Background(), cacheKey, buf.Bytes()); err != nil { if err := fileCache.Store(context.Background(), cacheKey, buf.Bytes()); err != nil {
fmt.Printf("failed to cache resized image: %v", err) fmt.Printf("failed to cache resized image: %v", err)
} }
@ -151,7 +151,7 @@ func createPreview(imgSvc ImgService, fileCache FileCache,
return buf.Bytes(), nil return buf.Bytes(), nil
} }
func previewCacheKey(fPath string, fTime int64, previewSize PreviewSize) string { func previewCacheKey(fPath string, fTime int64, previewSize PreviewSize, d *data) string {
fPath = filepath.Base(fPath) fPath = d.user.Scope + fPath
return fmt.Sprintf("%x%x%x", fPath, fTime, previewSize) return fmt.Sprintf("%x%x%x", fPath, fTime, previewSize)
} }

View File

@ -72,7 +72,7 @@ func resourceDeleteHandler(fileCache FileCache) handleFunc {
} }
// delete thumbnails // delete thumbnails
err = delThumbs(r.Context(), fileCache, file) err = delThumbs(r.Context(), d, fileCache, file)
if err != nil { if err != nil {
return errToStatus(err), err return errToStatus(err), err
} }
@ -119,7 +119,7 @@ func resourcePostHandler(fileCache FileCache) handleFunc {
return http.StatusForbidden, nil return http.StatusForbidden, nil
} }
err = delThumbs(r.Context(), fileCache, file) err = delThumbs(r.Context(), d, fileCache, file)
if err != nil { if err != nil {
return errToStatus(err), err return errToStatus(err), err
} }
@ -280,10 +280,10 @@ func writeFile(fs afero.Fs, dst string, in io.Reader) (os.FileInfo, error) {
return info, nil return info, nil
} }
func delThumbs(ctx context.Context, fileCache FileCache, file *files.FileInfo) error { func delThumbs(ctx context.Context, d *data, fileCache FileCache, file *files.FileInfo) error {
for _, previewSizeName := range PreviewSizeNames() { for _, previewSizeName := range PreviewSizeNames() {
size, _ := ParsePreviewSize(previewSizeName) size, _ := ParsePreviewSize(previewSizeName)
if err := fileCache.Delete(ctx, previewCacheKey(file.Path, file.ModTime.Unix(), size)); err != nil { if err := fileCache.Delete(ctx, previewCacheKey(file.Path, file.ModTime.Unix(), size, d)); err != nil {
return err return err
} }
} }
@ -320,7 +320,7 @@ func patchAction(ctx context.Context, action, src, dst string, d *data, fileCach
} }
// delete thumbnails // delete thumbnails
err = delThumbs(ctx, fileCache, file) err = delThumbs(ctx, d, fileCache, file)
if err != nil { if err != nil {
return err return err
} }