func (is imageStorable) ProcessPreviewAndUpload(s Store) (ContentKeys, error) {
	var g errgroup.Group
	contentKeys := ContentKeys{}
	imageBytes, err := io.ReadAll(is.data)
	if err != nil {
		return contentKeys, err
	}
	g.Go(func() (err error) {
		contentKeys.Full, err = s.Upload(bytes.NewReader(imageBytes))
		return err
	})
	g.Go(func() (err error) {
		resized, err := resizeImage(500, 500, bytes.NewReader(imageBytes))
		if err != nil {
			return err
		}
		contentKeys.Thumbnail, err = s.Upload(resized)
		return err
	})
	return contentKeys, g.Wait()
}
ProcessPreviewAndUpload alters an image to fit within a specified size (currently hard coded to 500x500)
and then uploads to the backing image store. The input image is expected to be in jpeg format,
while the resized thumbnail will be in png format
package contentstore
import (
	"bytes"
	"image"
	_ "image/jpeg"
	"image/png"
	"io"
	"github.com/nfnt/resize"
	"golang.org/x/sync/errgroup"
)
type imageStorable struct {
	data io.Reader
}
func NewImage(data io.Reader) Storable {
	return imageStorable{
		data: data,
	}
}