2012-02-07 92 views
2

我有像這樣構成的網頁上的圖像:上傳圖像(作爲數據:圖像/ PNG:BASE64)到網絡服務器

<img src="data:image/png;base64;...." /> 

來自用戶粘貼到瀏覽器中的圖像的內容。我的問題是如何將圖像上傳到網絡服務器(如果重要的話)。

+0

你的意思是在例如一個textarea粘貼?這聽起來很奇怪......你能解釋一下情況嗎? – giorgio 2012-02-07 23:44:07

+0

我有一個輸入,當用戶將圖像數據粘貼到它(即從剪貼板 - 僅在Chrome瀏覽器)它將數據分配給圖像作爲預覽之前它上傳 – Chris 2012-02-07 23:59:58

+0

@Chris如果你想看到一個實際的js代碼展示你已經擁有的東西,而不僅僅是一小部分不相關的東西。 – Cheery 2012-02-08 00:01:38

回答

7

1)取提交用戶使用javascript src屬性(或數據)

2)將其提交到服務器「是」或切開後base64;(AJAX或POST,GET方法是提交的所有信息可能不太適合大圖像)

3)解碼服務器端的base64(如果沒有切割,則在base64;之後的所有內容),將結果保存爲二進制 - 它是一個圖像。

就是這樣。

ps:只是一個提醒 - 通過小心可能的代碼注入。檢查提交的數據或有人將上傳編碼的PHP腳本。在上傳的文件夾中禁用PHP引擎,並驗證最終結果是一個實際的圖像(例如在GD庫的幫助下)。即使腳本無法在您的服務器上運行,它也可以用於使用php腳本對其他服務器的惡意請求。

+0

Thankyou,有沒有更簡單的方法來防止代碼注入? – Chris 2012-02-08 00:19:45

+2

@Chris在將數據保存到服務器之前,您必須驗證數據。正如我寫的,你可以檢查你可以通過GD模塊獲得圖像的寬度和高度。下一步不是保存用戶提供的文件擴展名的數據。我會嘗試在不改變參數的情況下調整圖像大小,保存結果。這樣你可以確定你只有通過GD的數據。 – Cheery 2012-02-08 00:24:11

1

只需將base 64編碼文本發佈到您的服務器。

你可以將它保存爲...

file_put_contents($image, base64_decode($str));