obrázky přes databázi postgresql
- jik
- Člen | 149
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
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>