2013-04-12 30 views
0

我對CakePHP相當新穎,圖像很適合我。您可以假設我正在使用最新版本。如何檢索從CakePHP到Android的圖像的鏈接?

我想構建一個Android應用程序,它可以顯示從服務器檢索到的圖像。

假設我在資產文件夾中有一個名爲football.jpg的圖像。我將如何將其存儲在數據庫中,然後如何將其輸出到Android應用程序?我只發送鏈接還是發送整個圖像?如果它只是鏈接,這是否意味着我將不得不重新連接到服務器的鏈接,然後獲取圖像?對不起,如果這沒有意義。仍然試圖讓我的頭靠近它。

+1

您只需要將圖像的鏈接發送到Android應用程序。但是,如果您希望將其保存爲脫機使用,那麼您可能需要一個Android的等效php的file_get_contents並將其保存在手機的某個位置(Android不是我的專長)。 –

回答

1

只需謹慎一點,最好將文件存儲在服務器的文件系統中,並將該文件的路徑存儲在數據庫中。其原因是BLOB存儲在文件系統的不同區域,與所有其他典型數據以及檢索方面相比,速度並不快很多。

下面是我的意思的鏈接:Store pictures as files or in the database for a web app?

至於其返回到您的Android應用程序,你可以在響應對象發送文件(http://book.cakephp.org/2.0/en/controllers/request-response.html#cake-response-file):

public function sendFile($id) { 
    $file = $this->Attachment->getFile($id); 
    $this->response->file($file['path']); 
    //Return reponse object to prevent controller from trying to render a view 
    return $this->response; 
} 

這應該給你更好地控制哪些文件返回給客戶端。

+0

嗨,謝謝你的回覆。我假設響應對象將是JSON/XML?例如,如果我有一個圖像列表,例如,一系列具有運動類別的圖像,我會以Android圖像鏈接列表的形式迴應Android應用程序。我必須使用另一個AsyncTask,然後重新連接嗎?對不起,我對這是如何工作的有點模糊 –

+0

另外,你使用了「附件」對象。那是什麼?我只是想知道,我將如何提供完整的網址。我不想做「www.example.com/public/assets/image.jpg」。有沒有什麼,$ Assets-> link(image.jpg);它會自動爲我生成完整的URL? –

+0

響應對象將是帶有HTTP標頭的圖像文件。是的,你的實現必須進行n + 1次調用(其中n是圖像的數量)。第一次調用將請求圖像的所有路徑(可能是JSON/XML),然後請求每個圖像的單獨調用(例如www.example.com/categoryImages/football)。 '$ this-> Attachment'對象是一個CakePHP模型(例如在數據庫中)。因此,在上面的代碼中,他們使用請求中傳遞的ID從數據庫中獲取文件記錄,然後將響應中的'file()'分配給記錄的路徑字段。 –