在php中保存文件而不保存在yii php中的文件夹中

时间:2016-09-19 05:01:58

标签: php mysql yii

将文件保存为long blob php首先将其保存在文件夹中然后保存到数据库中,问题是服务器具有写入权限,因此我想直接保存< / p>

这就是我所尝试的(这非常有效):

 if(isset($_POST['image'])){

        $id = 0;

        $image = $_POST['image'];
         $tmp_image = date('YmdHisu').'.jpg';

        file_put_contents($tmp_image, base64_decode($image));

         $sql = "INSERT INTO fingerprint(template)
            VALUES ('".addslashes(file_get_contents($tmp_image))."')";

                try
                    {
                               $connection=Yii::app()->db; 
                                $command=$connection->createCommand($sql);

                                $rowCount=$command->execute(); // execute the non-query SQL


                    echo "saved successifully";
                    unlink($tmp_image);

                    }
                    catch(Exception $ex)
                    {
                        echo 'Query failed' , $ex->getMessage();
                        unlink($tmp_image);
                    }


            }

如何在blob field mysql中保存此内容,而无需先将其保存在文件夹中,然后保存到数据库

1 个答案:

答案 0 :(得分:0)

假设您已经使用POST方法通过Android将文件发送到运行Yii1的服务器。

首先,物理文件包含在$ _FILES变量和$ _POST变量中,如你所说,包含以base 64格式编码的文件的字符串(我写这个是为了明确答案)。 $_FILE DOCUMENTATION

现在,您可以尝试使用yii代码以标准MVC yii方式上传文件:

您从外部设备上传文件确实如此,但Yii在CUploadedFile课程的帮助下:

  

调用getInstance以检索上载文件的实例,然后使用saveAs将其保存在服务器上。您还可以查询有关该文件的其他信息,包括名称,tempName,类型,大小和错误。

特别是你应该使用函数getInstancesByName来返回以指定数组名开头的实例数组。

$temp = CUploadedFile::getInstanceByName("image");  // $_FILES['image']

通过这个,您可以访问文件数据:

$temp->name; // Name of the file
$temp->type; // Type of the file 
$temp->size; // Size of the file
// etc etc..
$temp->saveAs("/your/path/" . $tmp_image . $temp->type); // Save your file

对于final,您可以检查文件是否已保存并执行查询:

if($temp->saveAs("/your/path/" . $tmp_image . $temp->type)) {
 // File is saved you can execute the query for save the record in your db
} else {
 // Something went wrong.
}

您也可以在模型中传输此逻辑。   check this link for more infos

希望这会对你有所帮助。