LINUX.ORG.RU

Выгрузить картинки из базы

 ,


0

1

Всем привет!

Есть задача выгрузить из базы картинки, использовать для этого нужно golang в котором я шарю чуть мене чем никак.

Моих потуг хватило на такое:

db.Exec("COPY pic FROM photo TO '$1';", PATH_TO_STORE + (strings.TrimSpace(resultString)))
Однако ж ничего не происходит! Кто-то может подсказать как добиться необходимого?



Последнее исправление: cetjs2 (всего исправлений: 2)

Язабан!(С)

anonymous
()

думаю, дело не в «golang в котором я шарю чуть мене чем никак».

что лежит в базе? Буквально, что за формат собственно данных и хранения, а не «картинки».

arkhnchul ★★★
()
Ответ на: комментарий от arkhnchul
 
                        Table "public.photo"
  Column  |     Type      |                Modifiers
----------+---------------+------------------------------------------
 id       | integer       | not null default nextval('id'::regclass)
 filename | character(64) |
 author   | character(64) |
 pic      | bytea         |
Indexes:
    "foto_pkey" PRIMARY KEY, btree (id)

Внутри лежат *.jpg

gadzira
() автор топика
Ответ на: комментарий от gadzira

Хорошая новость как раз в том, что скорее всего, это именно легче всего сделать на голенге. А вообще картинки в базе - ну такое.

Значит так, тебе нужно создать тип, который реализует два метода: Scan(v interface{}) error и Value() (driver.Value, erorr)

Пример можно взять отсюда:

https://gist.github.com/jmoiron/6979540

Накидал псевдкокод:

type Image struct {
	// Your hight-level abstraction over raw 
	// binary data fetched from db
	data []byte
}

type ImageDB struct {
	data []byte
}

func (i *ImageDB) Scan(src interface{}) error {
	// huy ego znaet, how postgres would send
	// image data in golang representation, it might be []byte I guess
	switch src.(type) {
	case string:
		i.data = []byte(src.(string))
	case []byte:
		i.data = src.([]byte)
	default:
		return errors.New("Can't scan data from db")
	}

	return nil
}

func (i *ImageDB) Value() (driver.Value, error) {
	return Image{i.data},nil
}

type Photo struct {
	ID int64
	Filename, Author string
	Pic ImageDB
}

type PhotoRepository interface {
	GetAll() ([]Photo, error)
}

func photoRepository struct {
	db *gorm.DB
}

func (r *photoRepository) GetAll() ([]Photo, error) {
	var all []Photo

	return all, db.New().Table("photo").Find(&all).Error
}
nikolnik ★★★
()
Ответ на: комментарий от nikolnik

А вообще картинки в базе - ну такое.

Знаю и сам не рад. Ок, спасибо, буду пробовать!

gadzira
() автор топика
Ответ на: комментарий от nikolnik

Хорошая новость как раз в том, что скорее всего, это именно легче всего сделать на голенге

если бы не требование делать на го, то именно это можно было сделать прям в консоли. Выгружать encode(pic, 'base64') и натравливать на выход base64 -d

arkhnchul ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.