将图像上传到php webservice并将其存储在MSSQL数据库中

时间:2016-05-06 14:42:46

标签: php sql-server web-services image-uploading sqlsrv

我正在尝试将图像上传到php Web服务并将其存储在MS SQL数据库中。我的帖子数据是json格式,有base64编码的图像数据。

Base 64编码并插入样本

$base=base64_encode(file_get_contents("C:\sample\images.jpg"));
$CommandText = "INSERT INTO [M_IMAGES] ([IMAGE_DATA]) VALUES(?) " ;
                 $ImageStream = imagecreatefromstring(base64_decode($this->imageData));
            $RowsAffected = (int)$objDBManager->Exe*emphasized text*cuteNonQuery($CommandText,array(array($ImageStream, 
                         SQLSRV_PARAM_IN,
                         SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY),
                         SQLSRV_SQLTYPE_VARBINARY('max'))));

此处 $ this-> imageData contanins base64编码图像数据和 IMAGE_DATA 数据类型为image。我可以在正常上传中成功上传和检索图像

正常上传

$ImagePath = $_FILES[$ImageCtrlName]['tmp_name'];
    $ImageStream = fopen($ImagePath, "r");
    $RowsAffected = (int)$objDBManager->ExecuteNonQuery($CommandText,
                        array(array(&$ImageStream,
                                 SQLSRV_PARAM_IN,
                                 SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY),
                                 SQLSRV_SQLTYPE_VARBINARY('max'))));
    fclose($ImageStream);

我收到错误 sqlsrv_query():提供的资源不是有效的流资源 任何人都可以指出这里有什么问题。或者有更好的方法来做到这一点。帮助我,因为我是PHP的新手。

2 个答案:

答案 0 :(得分:0)

最佳解决方案是仅在数据库中保存图像的URL并将图像保存在服务器中。 当您想要打印它时,您只需要搜索数据库中的URL。 尝试将图像保存在数据库中是一种错误的解决方案。

答案 1 :(得分:0)

从您的问题中我可以理解,您的问题源于尝试将图像存储为MSSQL,因为它是二进制形式,不允许。我可以做的是,建议您将图像存储在 base64 表单中,该表单是一串字母数字字符。没有必要尝试将图像存储为图像,因为 base64 编码图像通常可以直接提供给客户端。

TL; DR只需将图像存储为base64。