media_library

package module
v0.0.0-...-9bd445d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 13, 2016 License: MIT Imports: 24 Imported by: 0

README

Media Library

Media Library is a Golang library that supports the upload of files/images to a filesystem or cloud storage. The Plugin includes cropping and resizing features for images.

GoDoc

Usage

Media Library is dependant on GORM-backend models as it is using GORM's callbacks to handle file processing, so you will need to register callbacks first:

import "github.com/jinzhu/gorm"
import "github.com/qor/media_library"

DB, err = gorm.Open("sqlite3", "demo_db") // [gorm](https://github.com/jinzhu/gorm)

media_library.RegisterCallbacks(&DB)

Add Media Library support to structs:

// upload file to FileSystem
import "github.com/qor/media_library"

type Product struct {
	gorm.Model
	Image media_library.FileSystem
}

// Upload file to s3
import "github.com/qor/media_library/aws"

type Product struct {
	gorm.Model
	Image aws.S3
}

And you're done setting up! You could the use it like this:

var product Product

if productImage, err := os.Open("product_image.png"); err == nil {
	product.Image.Scan(productImage)
}

DB.Save(&product)

// Get image's url, will be s3 url if it is uploaded to s3
product.Image.URL()

Advanced Usage

// Resize images into different sizes when saving images
type ProductIconImageStorage struct{
	media_library.FileSystem
}

func (ProductIconImageStorage) GetSizes() map[string]media_library.Size {
	return map[string]media_library.Size{
		"small":    {Width: 60 * 2, Height: 60 * 2},
		"small@ld": {Width: 60, Height: 60},

		"middle":    {Width: 108 * 2, Height: 108 * 2},
		"middle@ld": {Width: 108, Height: 108},

		"big":    {Width: 144 * 2, Height: 144 * 2},
		"big@ld": {Width: 144, Height: 144},
	}
}

// Get image's url with style
product.Image.URL("small")
product.Image.URL("big@ld")

Qor Support

QOR is architected from the ground up to accelerate development and deployment of Content Management Systems, E-commerce Systems, and Business Applications and as such is comprised of modules that abstract common features for such systems.

Media Library could be used alone, but it works very nicely with QOR (as a QOR Plugin), if you have requirements to manage your application's data, be sure to check QOR out!

QOR Demo: http://demo.getqor.com/admin

Media Library Demo with QOR

License

Released under the MIT License.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterCallbacks

func RegisterCallbacks(db *gorm.DB)

RegisterCallbacks register callback into GORM DB

func RegisterMediaLibraryHandler

func RegisterMediaLibraryHandler(name string, handler MediaLibraryHandler)

RegisterMediaLibraryHandler register Media library handler

Types

type AssetManager

type AssetManager struct {
	gorm.Model
	File FileSystem `media_library:"URL:/system/assets/{{primary_key}}/{{filename_with_hash}}"`
}

AssetManager defined a asset manager that could be used to manage assets in qor admin

func (*AssetManager) ConfigureQorResource

func (*AssetManager) ConfigureQorResource(res resource.Resourcer)

ConfigureQorResource configure qor locale for Qor Admin

type Base

type Base struct {
	FileName    string
	Url         string
	CropOptions map[string]*CropOption `json:",omitempty"`
	Delete      bool                   `json:",omitempty"`
	Crop        bool                   `json:"-"`
	FileHeader  FileHeader             `json:"-"`
	Reader      io.Reader              `json:"-"`
	// contains filtered or unexported fields
}

Base defined a base struct for storages

func (Base) ConfigureQorMetaBeforeInitialize

func (Base) ConfigureQorMetaBeforeInitialize(meta resource.Metaor)

ConfigureQorMetaBeforeInitialize configure this field for Qor Admin

func (*Base) Cropped

func (b *Base) Cropped(values ...bool) (result bool)

Cropped mark the image to be cropped

func (Base) Ext

func (b Base) Ext() string

func (*Base) GetCropOption

func (b *Base) GetCropOption(name string) *image.Rectangle

GetCropOption get crop options

func (Base) GetFileHeader

func (b Base) GetFileHeader() FileHeader

GetFileHeader get file's header, this value only exists when saving files

func (Base) GetFileName

func (b Base) GetFileName() string

GetFileName get file's name

func (Base) GetSizes

func (b Base) GetSizes() map[string]Size

GetSizes get configured sizes, it will be used to crop images accordingly

func (Base) GetURL

func (b Base) GetURL(option *Option, scope *gorm.Scope, field *gorm.Field, templater URLTemplater) string

GetURL get default URL for a model based on its options

func (Base) GetURLTemplate

func (b Base) GetURLTemplate(option *Option) (path string)

GetURLTemplate get url template

func (Base) IsImage

func (b Base) IsImage() bool

IsImage return if it is an image

func (*Base) NeedCrop

func (b *Base) NeedCrop() bool

NeedCrop return the file needs to be cropped or not

func (Base) Retrieve

func (b Base) Retrieve(url string) (*os.File, error)

Retrieve retrieve file content with url

func (*Base) Scan

func (b *Base) Scan(data interface{}) (err error)

Scan scan files, crop options, db values into struct

func (Base) String

func (b Base) String() string

String return file's url

func (Base) URL

func (b Base) URL(styles ...string) string

URL return file's url with given style

func (Base) Value

func (b Base) Value() (driver.Value, error)

Value return struct's Value

type CropOption

type CropOption struct {
	X, Y, Width, Height int
}

CropOption includes crop options

type FileHeader

type FileHeader interface {
	Open() (multipart.File, error)
}

FileHeader is an interface, for matched values, when call its `Open` method will return `multipart.File`

type FileSystem

type FileSystem struct {
	Base
}

FileSystem defined a media library storage using file system

func (FileSystem) GetFullPath

func (f FileSystem) GetFullPath(url string, option *Option) (path string, err error)

GetFullPath return full file path from a relative file path

func (FileSystem) Retrieve

func (f FileSystem) Retrieve(url string) (*os.File, error)

Retrieve retrieve file content with url

func (FileSystem) Store

func (f FileSystem) Store(name string, option *Option, reader io.Reader) (err error)

Store save reader's context with name

type MediaLibrary

type MediaLibrary interface {
	Scan(value interface{}) error
	Value() (driver.Value, error)

	GetURLTemplate(*Option) string
	GetURL(option *Option, scope *gorm.Scope, field *gorm.Field, templater URLTemplater) string

	GetFileHeader() FileHeader
	GetFileName() string

	GetSizes() map[string]Size
	NeedCrop() bool
	Cropped(values ...bool) bool
	GetCropOption(name string) *image.Rectangle

	Store(url string, option *Option, reader io.Reader) error
	Retrieve(url string) (*os.File, error)

	IsImage() bool

	URL(style ...string) string
	Ext() string
	String() string
}

MediaLibrary is an interface including methods that needs for a media library storage

type MediaLibraryHandler

type MediaLibraryHandler interface {
	CouldHandle(media MediaLibrary) bool
	Handle(media MediaLibrary, file multipart.File, option *Option) error
}

MediaLibraryHandler media library handler interface, defined which files could be handled, and the handler

type Option

type Option map[string]string

Option media library option

func (Option) Get

func (option Option) Get(key string) string

Get used to get option with name

type Size

type Size struct {
	Width  int
	Height int
}

Size is a struct, used for `GetSizes` method, it will return a slice of Size, media library will crop images automatically based on it

type URLTemplater

type URLTemplater interface {
	GetURLTemplate(*Option) string
}

URLTemplater is a interface to return url template

Directories

Path Synopsis
handlers

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL