package uploadfiles import ( "io" "os" "path/filepath" "lmika.dev/lmika/weiro/models" ) type Provider struct { baseDir string } func New(baseDir string) *Provider { return &Provider{ baseDir: baseDir, } } func (p *Provider) AdoptFile(site models.Site, up models.Upload, filename string) error { fullPath := p.uploadFileName(site, up) baseDir := filepath.Dir(fullPath) if err := os.MkdirAll(baseDir, 0755); err != nil { return err } if err := os.Rename(filename, fullPath); err != nil { return err } return nil } func (p *Provider) OpenUpload(site models.Site, up models.Upload) (io.ReadCloser, error) { fullPath := p.uploadFileName(site, up) return os.Open(fullPath) } func (p *Provider) uploadFileName(site models.Site, up models.Upload) string { return filepath.Join(p.baseDir, site.GUID, up.Slug) }