package svg import ( "io" "log" "os" "path/filepath" ) type SvgStorage interface { Create(id string, svg io.Reader) (string, error) Get(id string) (io.ReadCloser, error) CreatePublic(data io.Reader, filetype string) (string, error) GetPublic(path string) (io.ReadCloser, error) } var _ SvgStorage = FileSvgStorage{} var TempDir string = "" type FileSvgStorage struct { basepath string } func NewFileStorage(path string) *FileSvgStorage { err := os.MkdirAll(path, 0755) if err != nil { panic(err) } log.Println("Initialized file storage handler") return &FileSvgStorage{path} } func (f FileSvgStorage) Create(id string, svg io.Reader) (string, error) { file, err := os.Create(filepath.Join(f.basepath, id+".svg")) if err != nil { return "", err } defer file.Close() _, err = io.Copy(file, svg) if err != nil { return "", err } log.Println("Created File: ", file.Name()) return file.Name(), nil } func (f FileSvgStorage) Get(id string) (io.ReadCloser, error) { file, err := os.Open(filepath.Join(f.basepath, id+".svg")) if err != nil { return nil, err } return file, nil } func (f FileSvgStorage) CreatePublic(data io.Reader, filetype string) (string, error) { path := filepath.Join(f.basepath, "public") if err := os.Mkdir(path, 0755); err != nil { return "", err } file, err := os.CreateTemp(path, "*."+filetype) if err != nil { return "", err } defer file.Close() return file.Name(), nil } func (f FileSvgStorage) GetPublic(path string) (io.ReadCloser, error) { file, err := os.Open(filepath.Join(f.basepath, "public", path)) if err != nil { return nil, err } return file, nil } func CreateTemp(data io.Reader, filetype string) (string, error) { file, err := os.CreateTemp(TempDir, "*."+filetype) if err != nil { return "", err } defer file.Close() _, err = io.Copy(file, data) if err != nil { return "", err } return file.Name(), nil }