feat: add carpet
This commit is contained in:
@@ -17,6 +17,9 @@ import (
|
||||
//go:embed cards
|
||||
var cardsFS embed.FS
|
||||
|
||||
//go:embed carpets
|
||||
var carpetsFS embed.FS
|
||||
|
||||
// CardsHandler یک http.Handler برای سرویسدهیِ فایلهای کارت زیر /cards/ است.
|
||||
// diskDir پوشهی اسکینهای آپلودی است (میتواند خالی/ناموجود باشد).
|
||||
// CORS باز است تا نسخهٔ وب (Flutter web / canvaskit) هم بتواند تصاویر را بکشد.
|
||||
@@ -45,3 +48,29 @@ func CardsHandler(diskDir string) http.Handler {
|
||||
embedded.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
|
||||
// CarpetsHandler تصاویرِ فرش را سرو میکند: GET /carpets/<id>.jpg
|
||||
// ابتدا از پوشهی دیسکی (آپلودِ ادمین)، سپس از فرشهای embedشدهی پیشفرض.
|
||||
// اگر هیچکدام نبود ۴۰۴ (اپ به میزِ ترسیمیِ classic برمیگردد).
|
||||
func CarpetsHandler(diskDir string) http.Handler {
|
||||
sub, err := fs.Sub(carpetsFS, "carpets")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
embedded := http.StripPrefix("/carpets/", http.FileServer(http.FS(sub)))
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
w.Header().Set("Cache-Control", "public, max-age=604800")
|
||||
// تلاشِ اول: پوشهی دیسکی (آپلودِ ادمین).
|
||||
if diskDir != "" {
|
||||
rel := filepath.Clean("/" + strings.TrimPrefix(r.URL.Path, "/carpets/"))
|
||||
full := filepath.Join(diskDir, rel)
|
||||
if st, err := os.Stat(full); err == nil && !st.IsDir() {
|
||||
http.ServeFile(w, r, full)
|
||||
return
|
||||
}
|
||||
}
|
||||
// تلاشِ دوم: فرشهای embedشده.
|
||||
embedded.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user