我将文件保存为long blob
在php
首先将其保存在文件夹中,然后保存到数据库,问题是服务器具有写权限,所以我想直接保存
这是我尝试过的(这工作完美):
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
没有首先必须保存在一个文件夹,然后保存到db
让我们假设您已经通过Android使用POST方法将文件发送到运行Yii1的服务器。
首先,物理文件包含在$_FILES变量和$_POST变量中,如您所说,包含以base 64格式编码的文件字符串(我写这个是为了明确的答案)。美元带有_FILE文档
现在你可以尝试使用yii代码用标准MVC yii方式上传文件:
这是真的,你从外部设备上传你的文件,但Yii在你的帮助与CUploadedFile类:
调用getInstance来检索上传文件的实例,然后使用savea将其保存在服务器上。您还可以查询文件的其他信息,包括名称、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
for 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.
}
您还可以在模型中传输此逻辑。点击此链接获取更多信息