2013-05-13 86 views
0

我有一个移动应用程序将一些数据发送到我的PHP Web服务。数据由一些文本项目和一个base64编码的字符串组成(将被解码为图像)。将图像文件路径插入到PostgreSQL数据库

我想将文本数据存储到一些数据列,然后包含该文件路径上传图像的最终文本列。我有一个名为usersImages/的目录,我希望存储用户收到的所有图像,但是当我上传数据时,我的PHP脚本目前不会在数据库中插入任何内容。

PHP文件:

$conn = pg_connect("database_credentials"); 
/* GET DATA */ 
$name = $_POST['name']; 
$s_name = pg_escape_string($name); 
$description = $_POST['desc']; 
$s_desc = pg_escape_string($description); 
$latitude = $_POST['lat']; 
$longitude = $_POST['lng']; 
$project = $_POST['project']; 

$encoded_photo = $_POST['snap']; 
echo $encoded_photo; 
$photo = base64_decode($encoded_photo); 
header('Content-Type: bitmap; charset=utf-8'); 
$file = fopen('usersImages/test.jpg', 'wb'); 
fwrite($file, $photo); 
fclose($file); 

$res = pg_query("INSERT INTO records (name, description, latitude, longitude, project, imagepath) VALUES ('$s_name', '$s_desc', '$latitude', '$longitude', '$project', '$file')"); 

我想要做什么:

我希望所有的数据存储与包含的图像的路径我的最后一列imagepath文本刚刚上传,但目前我没有成功。有任何想法吗?

+2

由于存在名称冲突的风险,我不会用一个人的教名作为文件名,但不是使用[UUID-OSSP]的唯一标识符(http://www.postgresql.org /docs/current/interactive/uuid-ossp.html)模块。 – 2013-05-13 17:07:11

+0

@ClodoaldoNeto感谢您的建议。我现在纯粹测试代码,用户将在移动应用程序中输入自己的文件名,并为其分配一个唯一的ID。 – WebDevDanno 2013-05-13 17:37:34

回答

1

我相信你正在运行到的问题是针对您存储文件$变量是fopen('usersImages/test.jpg', 'wb');了“的ImagePath”一栏。你不能将一个函数调用存储到一个列单元格中,而应该大概是存储一个适合你需要的数据类型(因为你想存储一个路径字符串,一个varchar应该可以正常工作)。

我想你会喜欢做的仅仅是存储实例的路径是什么:

$filePath = "usersImages/test.jpg"; 
$res = pg_query("INSERT INTO records (name, description, latitude, longitude, project, imagepath) VALUES ('$s_name', '$s_desc', '$latitude', '$longitude', '$project', '$filePath')"); 

(只要正确连接到您的数据库,这种方法应该工作)

我甚进一步建议您只存储变量名称以节省空间并硬编码总是相同的变量....例如,如果文件夹始终相同,并且图像类型始终为jpg,则可以只存储 $filePath = "test";并更改您的使用硬编码变量加载代码,而不仅仅是数据库查询。

至于你的实际图像上传到您的网站的其他问题,这是很难告诉你一个确切的答案,因为你没有提供相关的代码;但由于上传技术不当,看起来您收到了错误的文件。你应该尝试这样的,而不是fopen,fwrite,fclose方法。

<input type="file" name="file" id="file"> // In your form (seperate from PHP) 
$filePath = "userImages/test.jpg"; //setting file path 
$success = move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $filePath); //actually storing the file into your file-system into the selected path 
+0

谢谢,但仍然没有奏效。你可以提供一个代码编辑,将上传和解码的图像写入'$ filepath'变量? – WebDevDanno 2013-05-13 17:13:55

+0

@DanielD是否将filePath变量正确存储在数据库中?你是否还说明你无法将文件保存到你的网站文件系统? – 2013-05-13 17:33:03

+0

filePath变量没有被写入我的数据库。图像test.jpg出现在我选择的目录中,但大小为0kb,PostGreSQL数据库保持空白。 – WebDevDanno 2013-05-13 17:35:17