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

5jvtdoz2  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(195)

当前我在中具有base 64值

$model->test

我想解码控制器中的base 64值,并通过API将其保存到数据库中,这里是我在控制器中的一些代码
我试图解码,无法弄清楚如何将其上传到服务器并创建路径,但我试图将$数据传递到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()
        ];

我期望解码base 64并使用yii 2最佳实践上载所有值

gwo2fgha

gwo2fgha1#

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

相关问题