stevenbooru/vendor/src/github.com/deiwin/imstor/store.go

47 lines
1.2 KiB
Go

package imstor
import (
"bytes"
"errors"
"io"
"log"
"github.com/vincent-petithory/dataurl"
)
func (s storage) StoreDataURL(str string) error {
dataURL, err := dataurl.DecodeString(str)
if err != nil {
return err
}
return s.Store(dataURL.MediaType.ContentType(), dataURL.Data)
}
func (s storage) Store(mediaType string, data []byte) error {
dataReader := bytes.NewReader(data)
checksum := s.Checksum(data)
for _, format := range s.conf.Formats {
if mediaType == format.DecodableMediaType() {
return s.storeInFormat(dataReader, checksum, format)
}
}
return errors.New("Not a supported format!")
}
func (s storage) storeInFormat(r io.Reader, checksum string, f Format) error {
image, err := f.Decode(r)
if err != nil {
return err
}
copies := createCopies(image, s.conf.CopySizes, s.resizer)
folderPath := getAbsFolderPath(s.conf.RootPath, checksum)
if err = createFolder(folderPath); err != nil {
return err
}
if err = writeImageAndCopies(folderPath, image, copies, f); err != nil {
log.Println("Writing an image failed, but a new folder and some files may have already been created. Please check your filesystem for clutter.")
return err
}
return nil
}