weiro/providers/uploadfiles/provider.go

58 lines
1.1 KiB
Go
Raw Normal View History

2026-03-02 10:10:09 +00:00
package uploadfiles
import (
"io"
2026-03-02 10:10:09 +00:00
"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)
2026-03-02 10:10:09 +00:00
if err := os.MkdirAll(baseDir, 0755); err != nil {
return err
}
if err := os.Rename(filename, fullPath); err != nil {
2026-03-02 10:10:09 +00:00
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) DeleteUpload(site models.Site, up models.Upload) error {
fullPath := p.uploadFileName(site, up)
if err := os.Remove(fullPath); err != nil {
if os.IsNotExist(err) {
return nil
}
return err
}
return nil
}
func (p *Provider) UploadDir(site models.Site) string {
return filepath.Join(p.baseDir, site.GUID)
}
func (p *Provider) uploadFileName(site models.Site, up models.Upload) string {
return filepath.Join(p.baseDir, site.GUID, up.Slug)
}