obrázky přes databázi postgresql

jik
Člen | 149
+
0
-

Zdravím,
zkouším pracovat s obrázky ukládanými do db (postgresql). Ukládám je do BYTEA:

<?php
public function obrFormSubmitted ($form, $values) {
	$file              = $values->file;
	$record            = new Nette\Utils\ArrayHash;;
	$record->name      = $file->getName();
	$record->picture   = pg_escape_bytea($file->getContents());
	$record->format    = $file->getContentType();
	$this->obrRepos->insert($record);
}
?>

Načtení by potom mělo být přibližně takto:

<?php
public function actionDefault($id) {
		$obrazek    = $this->obrRepos->getPripad($id);
		$image            = new Nette\Utils\ArrayHash;
		$rawimage         = pg_unescape_bytea($obrazek->picture);
		$image->picture   = Image::fromString($rawimage);
		$image->format    = $obrazek->format;
		$image->name      = $obrazek->name;
		unset ($image);
}
?>

ale nejsem schopen se dostat přes pg_unescape_bytea. Můžete někdo poradit, jak mu předat data? Děkuji.

jik
Člen | 149
+
0
-

Problém s typem dat vyřešen obejitím – změnil jsem v databázi typ z BYTEA na TEXT a obrázek protáhl přes base64_encode/base64_encode:

<?php
	public function actionDefault($id) {
		$obrazky    = $this->obrRepos->getPripad($id);
		foreach($obrazky as $obrazek) {
			$image            = new Nette\Utils\ArrayHash;
			$rawimage         = base64_decode($obrazek->picture);
			$image->picture   = Image::fromString($rawimage, $obrazek->format);
			$image->format    = $obrazek->format;
			$image->name      = $obrazek->name;
			$this->pole[]     = $image;
			unset ($image);
		}
	}
?>

Zřejmě by mohlo fungovat – ale nezkoušel jsem:

<?php
$rawimage = pg_unescape_bytea(file_get_contents($obrazek->picture));
?>

A jednoduchá šablona:

<table>
{if $obrazky}{foreach $obrazky as $obrazek}
	<tr>
		<td>obrázek {$obrazek->name}</td>
		<td><img src="{$obrazek->picture|datastream}"/></td>
	</tr>
{/foreach}{/if}
</table>