MCPcopy
hub / github.com/filebrowser/filebrowser / handleImagePreview

Function handleImagePreview

http/preview.go:72–111  ·  view source on GitHub ↗
(
	w http.ResponseWriter,
	r *http.Request,
	imgSvc ImgService,
	fileCache FileCache,
	file *files.FileInfo,
	previewSize PreviewSize,
	enableThumbnails, resizePreview bool,
)

Source from the content-addressed store, hash-verified

70}
71
72func handleImagePreview(
73 w http.ResponseWriter,
74 r *http.Request,
75 imgSvc ImgService,
76 fileCache FileCache,
77 file *files.FileInfo,
78 previewSize PreviewSize,
79 enableThumbnails, resizePreview bool,
80) (int, error) {
81 if (previewSize == PreviewSizeBig && !resizePreview) ||
82 (previewSize == PreviewSizeThumb && !enableThumbnails) {
83 return rawFileHandler(w, r, file)
84 }
85
86 format, err := imgSvc.FormatFromExtension(file.Extension)
87 // Unsupported extensions directly return the raw data
88 if errors.Is(err, img.ErrUnsupportedFormat) || format == img.FormatGif {
89 return rawFileHandler(w, r, file)
90 }
91 if err != nil {
92 return errToStatus(err), err
93 }
94
95 cacheKey := previewCacheKey(file, previewSize)
96 resizedImage, ok, err := fileCache.Load(r.Context(), cacheKey)
97 if err != nil {
98 return errToStatus(err), err
99 }
100 if !ok {
101 resizedImage, err = createPreview(imgSvc, fileCache, file, previewSize)
102 if err != nil {
103 return errToStatus(err), err
104 }
105 }
106
107 w.Header().Set("Cache-Control", "private")
108 http.ServeContent(w, r, file.Name, file.ModTime, bytes.NewReader(resizedImage))
109
110 return 0, nil
111}
112
113func createPreview(imgSvc ImgService, fileCache FileCache,
114 file *files.FileInfo, previewSize PreviewSize) ([]byte, error) {

Callers 1

previewHandlerFunction · 0.85

Calls 6

rawFileHandlerFunction · 0.85
errToStatusFunction · 0.85
previewCacheKeyFunction · 0.85
createPreviewFunction · 0.85
FormatFromExtensionMethod · 0.65
LoadMethod · 0.65

Tested by

no test coverage detected