2014-01-27 108 views
0

我試圖使用base64編碼將圖像(任何大小)發送到我創建的API。編碼後的字符串會作爲URL中的參數訪問我的API。使用PHP構建的API。PHP base64編碼的圖像顯示不正確

一旦請求命中我的API,我想將圖像存儲到我的服務器上,並將文件名保存在數據庫中。這是工作,但我得到一些奇怪的輸出與實際的形象。

僅供參考,我還遵循http://blog.justin.kelly.org.au/simple-base64-encodedecode-url-safe-functions/但具有相同的結果。

我想我的存儲服務器上的圖像:

enter image description here

$encode = base64_encode(file_get_contents($image)); 

echo $encode; 

爲了進行測試,在此輸出中是我使用的是傳遞給我的API的字符串。

在API:

$image = base64_decode($_POST['image'])); 
$image_name = md5($image) . ".jpg"; 
file_put_contents(/public/image/ . $image_name, $image); 

這工作,我的形象被放到服務器在正確的目錄與保存到數據庫中的隨機名字。

然而,直接導航到圖像時,圖像扭曲:

enter image description here

如果你有敏銳的眼光,在圖像的頂部部分實際上是正確的,它開始失效前,這讓我開始思考字符串是否沒有正確編碼以作爲參數發送?

任何線索都會很可愛,歡呼。

編輯:改變它POST,刪除urlencode /解碼&刪除strtr

+1

PHP正在截斷您的變量。您可以更改配置以允許更長的長度。我會馬上切換到POST。 –

+1

也注意到一些瀏覽器/服務器對網址長度也設置了最大限制 –

+2

...如果您不使用GET,則不必使用urldecode,這實際上只是代碼可能中斷的另一種方式 –

回答

0

也許我看錯了,但首先你編碼它base64 - > urlencode,然後你解碼它base64 - > urldecode再次,不應該後者倒序?

+0

我寧願說urldecode不應該被應用,因爲PHP在填充$ _GET之前自動執行。 – CBroe

0

感謝的評論:

base64_encode(file_get_contents($image_path)); 

沒有urlencode或需要strtr。使用POST請求,並更改Web服務器上的post_max_size以允許傳遞更大的圖像。

$image = base64_decode($this->getParameters('avatar')); 
$image_name = md5($image) . ".jpg";