Documentation
¶
Index ¶
- Constants
- Variables
- func IsSupportedImageType(mimeType string) bool
- func NewImageCachingError(reason string) error
- func NewUnsupportedSVG(url string) error
- type ImageCachingError
- type ImageMetadata
- type ImageReader
- type ImageStore
- func (s *ImageStore) AutoMigrate() error
- func (s *ImageStore) CreateOrGetImage(ctx context.Context, assetID string) (ImageMetadata, error)
- func (s *ImageStore) GetImage(ctx context.Context, assetID string) (ImageMetadata, error)
- func (s *ImageStore) UploadImage(ctx context.Context, assetID string, imageReader ImageReader, ...) (ImageMetadata, error)
- type Metadata
- type UnsupportedImageCachingError
- type UnsupportedSVGError
Constants ¶
const ( ReasonBrokenImage = "ErrBrokenImage" ReasonUnsupportedImageType = "ErrUnsupportedImageType" ReasonUnsupportedSVGFile = "ErrUnsupportedSVGFile" ReasonDownloadFileFailed = "ErrDownloadFileFailed" ReasonFileSizeTooLarge = "ErrSizeTooLarge" ReasonUnknownCloudflareAPIFailure = "ErrUnknownCloudflareAPIFailure" )
Reason keys for unsupported errors
const CloudflareImageDeilverURL = "https://imagedelivery.net/%s/%s/public"
const ImageSizeThreshold = 10 * 1024 * 1024 // 10MB
Variables ¶
var ImageCachingErrorReasons = map[string]string{ ReasonBrokenImage: "broken image", ReasonUnsupportedImageType: "unsupported image type", ReasonUnsupportedSVGFile: "unsupported SVG File", ReasonDownloadFileFailed: "download file error", ReasonFileSizeTooLarge: "size too large", ReasonUnknownCloudflareAPIFailure: "unknown cloudflare api error", }
Functions ¶
func IsSupportedImageType ¶
IsSupportedImageType validates if an image is supported
func NewImageCachingError ¶
NewImageCachingError returns ImageCachingError if a reson is given. Otherwise, it returns a regular error.
func NewUnsupportedSVG ¶
Types ¶
type ImageCachingError ¶
type ImageCachingError struct {
// contains filtered or unexported fields
}
func (*ImageCachingError) Error ¶
func (e *ImageCachingError) Error() string
func (*ImageCachingError) Reason ¶
func (e *ImageCachingError) Reason() string
type ImageMetadata ¶
type ImageMetadata struct {
AssetID string `json:"assetID" gorm:"index:image_asset_id,unique"`
ImageID string `json:"fileID"`
CreatedAt time.Time
UpdatedAt time.Time
}
func (ImageMetadata) TableName ¶
func (p ImageMetadata) TableName() string
type ImageStore ¶
type ImageStore struct {
// contains filtered or unexported fields
}
func New ¶
func New(dsn string, cloudflareAccountHash, cloudflareAccountID, cloudflareAPIToken string) *ImageStore
func (*ImageStore) AutoMigrate ¶
func (s *ImageStore) AutoMigrate() error
func (*ImageStore) CreateOrGetImage ¶
func (s *ImageStore) CreateOrGetImage(ctx context.Context, assetID string) (ImageMetadata, error)
CreateOrGetImage creates an image record in db if it is not existed. Otherwise, returns the existed one
func (*ImageStore) GetImage ¶
func (s *ImageStore) GetImage(ctx context.Context, assetID string) (ImageMetadata, error)
GetImage returns an image metadata object
func (*ImageStore) UploadImage ¶
func (s *ImageStore) UploadImage(ctx context.Context, assetID string, imageReader ImageReader, metadata map[string]interface{}) (ImageMetadata, error)
UploadImage creates a db transaction to download and upload an image to cloudflare. After an image is successfully uploaded to cloudflare, it updates the returned image id into image store. It locks an image record for updating which prevents from duplicated download precess The additional metadata will be attached to the image file when we upload it to cloudflare.
type UnsupportedSVGError ¶
type UnsupportedSVGError struct {
URL string
}
func (*UnsupportedSVGError) Error ¶
func (e *UnsupportedSVGError) Error() string
func (*UnsupportedSVGError) Reason ¶
func (e *UnsupportedSVGError) Reason() string