Yii2:将图像上传到MongoDB(Blob,Base64,Binary)

时间:2016-02-18 13:48:12

标签: mongodb yii2 yii2-basic-app

我想使用表单在MongoDB中存储图像,但我想将整个图像存储到我的数据库中,而不是将其上传到服务器,然后将图像路径存储在数据库中。

有什么方法可以将它编码为blob,Base64甚至Binary? 不,这里描述的方式(http://www.yiiframework.com/wiki/622/upload-files-in-yii2-with-mongodb-and-gridfs/)不是我想要的方式。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

对于最大16MB的图像,您可以使用MongoBinData类型。

类似的东西:

// get temporary filename from form model
$tmpname = UploadedFile::getInstance($model,'file')->tempName;

// create new Active Record
$imageModel = new UploadedImage; 

// set attribute using a new MongoBinData object
// the object is created using $tmpname contents
$imageModel->contents = new MongoBinData(
                         file_get_contents($tmpname),
                         MongoBinData::GENERIC);

您可能还想检查一些php.ini参数,以了解上传大小和最大PHP内存大小的任何限制。

回传文件的一种方法是:

public function actionDownloadImage($id) {
    $model = UploadedImage::findOne($id);
    $stream =  fopen("data://image/jpeg;base64," .
                     base64_encode($model->contents->bin) );
    return \Yii::$app->response->sendStreamAsFile($stream)->send();
}