将base64解码为jpeg并将图像保存到服务器

时间:2019-10-15 07:13:42

标签: yii yii2 yii2-advanced-app

当前我的基数为64

$model->test

我想在控制器中解码基数64的值,并通过API将其保存到数据库中,这是我在控制器中的一些代码

我尝试解码,无法弄清楚如何将其上传到服务器并创建路径 但是我尝试将$ data传递给不起作用的getinstance

public function doSaveStudent(StudentLoanForm $model)
{
    $url = API_URL . 'web/apply/student';
    $data1 = $model->test;
    $decode = base64_decode($data);
    $img = file_put_contents('webcam.jpg', $data);

    $model->doUploads();

    $ktpdetail = UploadedFile::getInstance($model, 'image_ktp');

    $data = null;

    $data = [

        [
            'name' => 'univ_name',
            'contents' => $model->univ_name
        ],
            [
            'name' => 'test',
            'contents' =>$model->test
        ],

    ];
    // dd($model->test);
    if ($ktpdetail != null) {
        $data[] = [
            'name' => 'image_ktp',
            'contents' => fopen(Yii::getAlias('@frontend/web/') . $model->image_ktp, 'r'),
            'filename' => $ktpdetail->getBaseName() . '.' . $ktpdetail->getExtension()
        ];
    }

    if($ktpayahdetail != null){
        $data[] = [
            'name' => 'foto_ktp_ayah',
            'contents' => fopen(Yii::getAlias('@frontend/web/') . $model->foto_ktp_ayah, 'r'),
            'filename' => $ktpayahdetail->getBaseName() . '.' . $ktpayahdetail->getExtension()
        ];
    }
    if ($kkdetail != null) {
        $data[] = [
            'name' => 'image_kk',
            'contents' => fopen(Yii::getAlias('@frontend/web/') . $model->image_kk, 'r'),
            'filename' => $kkdetail->getBaseName() . '.' . $kkdetail->getExtension()
        ];

我希望使用yii2最佳做法对基数64进行解码并上传所有值

1 个答案:

答案 0 :(得分:0)

yii\web\UploadedFile仅用于使用表单中的文件输入上传的文件。

在您的情况下,base64_decode($model->test)应该为您提供图像的二进制数据。

然后,您有两个选择处理它们。

1)您可以将它们直接存储到数据库的BLOB属性中。

$imageModel = new MyImageModel();
$imageModel->data = base64_decode($model->test);
if(!$imageModel->save()) {
    throw new \yii\base\Exception("Couldn't save file to db");
}

2)您可以使用file_put_contents保存文件,然后将文件的路径存储在模型中。

$imageData = base64_decode($model->test);
//the used alias in path is only example. 
//The datetime and random string are used to avoid conflicts
$filename = Yii::getAlias(
    '@frontend/web/' . date('Y-m-d-H-i-s') .
        Yii::$app->security->generateRandomString(5) . '.jpg'
);
if (file_put_contents($filename, $imageDate === false) {
    throw new \yii\base\Exception("Couldn't save image to $filename");
}
$imageModel = new MyImageModel();
$imageModel->path = $filename;
if(!$imageModel->save()) {
    //delete file if we couldn't save path into db to prevent creating an orphan
    unlink($filename);
    throw new \yii\base\Exception("Couldn't add $filename to database");
}