【发布时间】:2016-05-06 23:00:35
【问题描述】:
我正在尝试将图像上传到 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 包含 base64 编码的图像数据,IMAGE_DATA 数据类型是图像。我能够在正常上传中成功上传和检索图像
正常上传
$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 新手。
【问题讨论】:
-
我不建议将图像存储在数据库中,因为 base64 会变得非常大。
-
@LFlare 我会接受你的建议。但是现有的生产代码以这种方式存储图像,我不想改变它。
-
迁移所有 base64 图像,将它们转换回原始形式并将它们存储为文件,而不是表中的列,这可能符合您的最佳利益。当涉及到 2-5MB 的大图像时,您将真正意识到不建议将图像存储在数据库中,无论是在性能上还是在逻辑上。 但是,如果您仍打算这样做,我希望它存储在
text/longtext类型列中 -
@LFlare 最大图像大小为 1 MB,并以图像形式存储
-
我不太确定,
I am trying to upload image to php web service and store it in MS SQL database.告诉我您正在将图像存储到数据库中? 编辑:我意识到你的问题,请看我的回答。
标签: php sql-server web-services image-uploading sqlsrv