0

我有一个将一些数据发送到我的 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包含我刚刚上传的图像的路径,但目前我没有成功。有任何想法吗?

4

1 回答 1

1

我相信您遇到的问题是您正在存储 $file 变量的“图像路径”列,即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
于 2013-05-13T17:01:45.780 回答