2016-12-13 29 views
1

我有一個PHP Laravel應用程序,它被用作我的前端JavaScript應用程序的API。如何檢測圖像字段的API帖子是文件,base64字符串還是圖片網址?

在我的圖像字段中,我目前只是在我的數據庫中存儲圖像URL,這需要前端應用程序在發佈之前處理上傳圖像以將其保存到我的API。

我的目標是讓所有的API圖像領域接受任何一項:

  • 二進制文件上傳
  • Base64編碼數據的圖像
  • URL遠程圖像的

然後,我的API會檢測傳入圖像字段文章的3種類型中的哪一種,並根據需要處理它。二進制文件將上傳文件並將本地圖像URL保存到數據庫,Base64圖像也將保存到本地圖像並將URL保存到數據庫,遠程圖像URL將使用cURL之類的東西下載圖像並保存本地圖像數據庫的URL。

我所描述的我想要做的是像imgur.com那樣的API。以下是通過他們的API創建一個新的圖像API規格:

上傳新的圖片與imgur.com API

Method POST 
Route https://api.imgur.com/3/image 

Parameters 
Key  Required  Description 
------------------------------------ 
image  required  A binary file, base64 data, or a URL for an image. (up to 10MB) 

所以我現在的問題是,使用PHP:如何能我檢測到我的圖像字段的POST是否是圖像文件,Base64字符串或圖像URL字符串?

回答

2

我想一個真正的圖像文件將作爲一個多部分附件來找你。因此,您可以通過嗅探$_FILES數組來檢測此數據:如果存在圖像,則會將真實圖像文件上載到您的API。具體來說,在Laravel中,您將使用$request->file

否則,您將在請求的數據中具有字符串值。你可以嗅出它的價值:如果它從data:image開始,它就是一個編碼圖像。

最後,你可以看看字符串以http或更聰明,並尋找一個域名格式,是這樣的:

/http(?:s)?:\/\/(?:[\w-]+\.)*([\w-]{1,63})(?:\.(?:\w{3}|\w{2}))(?:$|\/)/i 

希望這有助於!

1

Base64不允許您通常在url中找到的':'字符,或者如果您只打算支持這些協議,則可以檢查'http://'和'https://'。

文章中的文件可以在$ _FILES中找到,或者使用laravel可以使用https://laravel.com/docs/5.3/requests上提到的使用hasFile()函數檢查文件。

相關問題