我想使用表单在MongoDB中存储图像,但我想将整个图像存储到我的数据库中,而不是将其上传到服务器,然后将图像路径存储在数据库中。
有什么方法可以将它编码为blob,Base64甚至Binary? 不,这里描述的方式(http://www.yiiframework.com/wiki/622/upload-files-in-yii2-with-mongodb-and-gridfs/)不是我想要的方式。
非常感谢任何帮助。
答案 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();
}