wheelchairy b6ea0e0f59 upd2
2025-02-04 18:30:33 +03:00

50 lines
1.1 KiB
Go

package cache
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"path/filepath"
)
var cacheDir = "./cache"
func GetCachedFile(url string) (string, error) {
if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil {
return "", err
}
fileName := filepath.Join(cacheDir, filepath.Base(url))
if _, err := os.Stat(fileName); err == nil {
return fileName, nil
}
return "", nil
}
func SaveToCache(url string, data []byte) (string, error) {
if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil {
return "", err
}
fileName := filepath.Join(cacheDir, filepath.Base(url))
if err := ioutil.WriteFile(fileName, data, 0644); err != nil {
return "", err
}
fmt.Printf("Сохранено в кэш: %s\n", fileName)
return fileName, nil
}
func DownloadWithCache(url string) (string, error) {
if cached, err := GetCachedFile(url); err == nil && cached != "" {
return cached, nil
}
resp, err := http.Get(url)
if err != nil {
return "", err
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
return SaveToCache(url, data)
}