我有一个移动应用程序,它将一些数据发送到我的PHP Web服务。数据由一些文本项和base64编码的字符串组成(将被解码为图像)。
我想将文本数据存储到一些数据列中,然后将最终文本列存储到上载图像的文件路径中。我有一个名为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
包含我刚刚上传的图片的路径,但此刻我没有成功。有什么想法吗?
答案 0 :(得分:1)
我认为您遇到的问题是存储$ file变量的“imagepath”列,fopen('usersImages/test.jpg', 'wb');
。您不能将函数调用存储到列单元格中,而应该存储一个适合您需要的数据类型(因为您要存储路径字符串,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