47 lines
1.2 KiB
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
|
|
}
|