2013-05-13 126 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