2014-12-23 102 views
2

問候Yii2顯示圖像存儲在BLOB數據庫字段

我需要顯示在從Yii2

一個ListView或類似插件存儲在BLOB數據庫字段圖像I具有保存的actionCreate圖像表命名honra作爲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, 
     ]); 
    } 
} 

我也哈哈已經命名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'), 
    ]; 
} 

}模型

的圖像被成功地存儲在名爲binaryfile

表字段,我需要以顯示存儲在數據庫中的視圖的每個團塊圖像命名view2內LISTVIEW或類似的部件

任何人都知道什麼塊o f代碼我需要把view2和HonraController來實現這個?

編輯

解決

這裏是一個解決問題的代碼中,目前一切運作良好

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]); 
} 

非常感謝您的幫助MIHAI

+0

那麼你必須再次調用一個控制器中的動作,才能給出圖像。這是列表中的每個圖像。你不能直接在列表中顯示它,我相信因爲HTML不能這樣工作。你爲什麼選擇將圖像放入數據庫?它會讓你的數據庫變得非常快,你可以創建一個獨特的鏈接(也許使用散列,這樣人們就不會猜測其他圖像的路徑),只需將路徑存儲在數據庫中即可。 –

+0

關於保留圖像中的圖像的更多意見http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay –

+0

我把圖像放在數據庫中,因爲我想要一個列表視圖來存儲並顯示一個人的名字,並顯示其照片。照片從第一時刻開始可見,而不是鏈接。 –

回答

1

以下是Yii2的官方文檔https://github.com/yiisoft/yii2/blob/master/docs/guide/input-file-upload.md 這很簡單。

一些評論:
1)圖片可能是私人的,如果有人猜測別人的路徑,這可能是一個大問題。在這種情況下,您可以將文件放置在不在Web文件夾中的位置。如果你這樣做,那麼你必須使用這些資產來顯示他們assetManager-> getPublishedUrl('@ app/folder')?>/fav.ico
2)如果圖片不太敏感,那麼你可以將它們保存在某個地方在web文件夾中。

正如你所看到的,你可能在上傳相同文件名2次時遇到問題,因爲1會覆蓋另一個。你總是可以重命名文件,我將他們的代碼實際上改變這樣的事情

 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'])); 
      } 
     } 
+0

非常感謝答案,Mihai。我會在短時間內試一試:) –

+0

Hi Mihai,我修改了你的代碼,這樣你就可以看到我的實際狀態和問題。 –

+0

解決。請在上面的編輯中看到我的完整解決方案。非常感謝Mihai指出了正確的道路。 –

0

我發現顯示從BLOB字段中的圖像(在MySQL數據庫中)使用該代碼的最短路程(在我視圖):

$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).'"/>'; 

注意,在這個例子中,我有表「表名」如本例只有一行用來檢索從公司的標誌。在該表中只有一家公司存儲。

+0

非常感謝。我會盡快解決這個問題。 –

相關問題