2013-05-13 2 views
0

У меня есть мобильное приложение, которое отправляет некоторые данные на веб-службу PHP. Данные состоят из некоторых текстовых элементов и строки с кодировкой 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, содержащей путь к изображению I только что загрузили, но на данный момент у меня нет успеха. Есть идеи?

+2

Поскольку существует риск столкновения имя, я бы не использовать человека данное имя в качестве имени файла, но уникальный идентификатор в использовании вместо [UUID-OSSP] (http://www.postgresql.org /docs/current/interactive/uuid-ossp.html). –

+0

@ClodoaldoNeto благодарю вас за ваш совет. Я просто проверяю код на данный момент, пользователь будет вводить собственное имя файла в мобильном приложении и ему будет присвоен уникальный идентификатор. – WebDevDanno

ответ

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')"); 

(До тех пор, как вы правильно подключены к базе данных этот метод должен работать)

Might Я даже еще раз предположим, что вы храните только имя переменной, чтобы сэкономить место и скопировать переменные, которые всегда одинаковы .... например, если папка всегда одинакова, а тип изображения всегда 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

+0

@DanielD Является ли переменная filePath корректно хранимой в вашей базе данных? Также вы заявляете, что не можете сохранить файл на своей файловой системе? –

+0

переменная filePath НЕ записывается в мою базу данных. Изображение 'test.jpg' появляется в моей выбранной папке, но имеет размер 0kb, а база данных PostGreSQL остается пустой. – WebDevDanno

Смежные вопросы