我有一个PHP Laravel应用程序,它被用作我的前端JavaScript应用程序的API。
在我的图片字段中,我目前只是在我的数据库中存储一个图片网址,这需要前端应用程序处理上传图片,然后再将其保存到我的API。
我的目标是让我的所有API图片字段都接受以下任何一项:
我的API将检测传入图像字段发布的3种类型中的哪一种,并根据需要进行处理。二进制文件将上传文件并将本地图像URL保存到数据库,Base64图像也将保存到本地图像并将URL保存到DB,远程图像URL将使用类似cURL的内容下载图像并保存本地图像DB的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字符串?
答案 0 :(得分:2)
我想一个真实的图像文件会作为多部分附件来找你。因此,您可以通过嗅探$_FILES数组来检测到这一点:如果有图像,则会将真实图像文件上传到您的API。具体来说,在Laravel中,您可以使用$request->file
否则,您将在请求的数据中有一个字符串值。你可以嗅出这个值:如果它以data:image开头,它就是一个编码图像。
最后,您可以查找以http开头或更智能的字符串并查找域格式,例如:
/http(?:s)?:\/\/(?:[\w-]+\.)*([\w-]{1,63})(?:\.(?:\w{3}|\w{2}))(?:$|\/)/i
希望这有帮助!
答案 1 :(得分:1)
Base64不允许您通常在网址中找到的“:”字符,或者如果您只打算支持这些协议,则可以检查“http://”和“https://”。< / p>
帖子中的文件可以在$ _FILES中找到,或者使用laravel,您可以使用hasFile上提到的https://laravel.com/docs/5.3/requests()函数检查文件。