database - para - mostrar imagen en base de datos php
Yii2 Muestra la imagen almacenada en el campo de la base de datos BLOB (2)
Aquí está la documentación oficial en Yii2 https://github.com/yiisoft/yii2/blob/master/docs/guide/input-file-upload.md. Es bastante simple.
algunos comentarios:
1) las fotos pueden ser privadas y podría ser un gran problema si alguien adivina el camino de los demás. En este caso, puede colocar el archivo en un lugar NO en la carpeta web. Si haces esto, entonces tienes que usar los activos para mostrarlos assetManager-> getPublishedUrl (''@ app / folder'')?> / Fav.ico
2) si las fotos no son tan delicadas, puedes guardarlas en la carpeta web.
Como puede ver, puede tener problemas para cargar el mismo nombre de archivo 2 veces, ya que 1 anulará el otro. Siempre puedes cambiar el nombre del archivo, realmente cambiaría su código a algo como esto
if ($model->file && $model->validate()) {
$model->file = UploadedFile::getInstance($model, ''file'');
$filePath = ''uploads/'' . hash(''ripemd160'', microtime()) . $model->file->baseName . ''.'' . $model->file->extension;
$model->fileName = $filePath;
$model->save();
$model->file->saveAs(''uploadsimg/'' . $model->file->baseName . ''.'' . $model->file->extension);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(Url::toRoute([''create'']));
}
}
Saludos
Necesito mostrar las imágenes almacenadas en los campos de la base de datos BLOB en un widget LISTVIEW o similar de Yii2
Tengo la acción Crear que guarda la imagen en la tabla llamada honra como un BLOB
public function actionCreate()
{
$model = new Honra();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$file = UploadedFile::getInstance($model,''binaryfile'');
$model->binaryfile=$file;
return $this->redirect([''view'', ''id'' => $model->id]);
} else {
return $this->render(''create'', [
''model'' => $model,
]);
}
}
También tengo el modelo llamado Honra
class Honra extends /yii/db/ActiveRecord{
public static function tableName()
{
return ''honra'';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[[''nome'', ''texto''], ''required''],
[[''texto'', ''binaryfile''], ''string''],
[[''ativo''], ''integer''],
[[''nome''], ''string'', ''max'' => 255],
[[''fileName''], ''string'', ''max'' => 100],
[[''fileType''], ''string'', ''max'' => 50]
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
''id'' => Yii::t(''app'', ''ID''),
''nome'' => Yii::t(''app'', ''Nome''),
''texto'' => Yii::t(''app'', ''Texto''),
''fileName'' => Yii::t(''app'', ''File Name''),
''fileType'' => Yii::t(''app'', ''File Type''),
''binaryfile'' => Yii::t(''app'', ''Binaryfile''),
''ativo'' => Yii::t(''app'', ''Ativo''),
];
}
}
Las imágenes se almacenan con éxito en el campo de tabla llamado binaryfile
Y necesito mostrar cada imagen de blob almacenada en la base de datos en una vista llamada view2 dentro de un widget LISTVIEW o similar
¿Alguien sabe qué bloque de código necesito poner en view2 y HonraController para lograr esto?
EDITAR
SOLUCIONADO
AQUÍ ESTÁ EL CÓDIGO QUE RESOLVIÓ EL PROBLEMA, AHORA TODO ESTÁ FUNCIONANDO BIEN
public function actionCreate()
{
$model = new Honra();
if (Yii::$app->request->isPost) {
$model->file = UploadedFile::getInstance($model, ''file'');
$filePath = ''uploadsimg/'' . $model->file->baseName . ''.'' . $model->file->extension;
$model->fileName = $filePath;
$model->save();
$model->file->saveAs(''uploadsimg/'' . $model->file->baseName . ''.'' . $model->file->extension);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(Url::toRoute([''create'']));
}
}
return $this->render(''create'', [''model'' => $model]);
}
MUCHAS GRACIAS POR LA AYUDA MIHAI
La forma más corta que encontré para mostrar una imagen desde un campo BLOB (en una base de datos MySQL) fue usando este código (en mi opinión):
$sql = "SELECT FieldName FROM TableName"; //optional where statements etc.
$connection = Yii::$app->getDb();
$command = $connection->createCommand($sql);
$imgLogo = $command->queryScalar();
echo ''<img src="data:image/jpeg;base64,''.base64_encode($imgLogo).''"/>'';
Tenga en cuenta que en este ejemplo tengo solo una fila en la tabla ''TableName'', ya que este ejemplo se utilizó para recuperar el logotipo de la empresa. Y solo hay una compañía almacenada en esa mesa.