我的任务是为现有的移动应用构建API。 App正在同一个PUT请求中发送多部分数据和文件。例如,有/ api / employee / personal-info PUT端点(注意URI中没有ID),这是一个多部分 - JSON数据和2个图像。
PHP没有对PUT的本机支持,它不能很好地将所有内容放在$ _FILES和$ _POST中,所以我必须手动解码输入。
我首先要做file_get_contents("php://input")
,这会给我原始数据。我必须使用正则表达式来提取边界字符串,然后我需要使用该边界(再次使用正则表达式)将输入拆分为块,然后通过查看每个块上的Content-Disposition来确定块是JSON还是文件。块。如果是文件,我必须重新编写文件名和扩展名,并手动填充$ _FILES数组。
Json bloks有这些标题(在正文中,就在实际数据之前)
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=model
和文件块只有这个:
Content-Disposition: form-data; name=file; filename=IMG_20180208_1.jpg; filename*=utf-8’’IMG_20180208_1.jpg
因此整个输入的Content-Disposition是multipart / form-data,但是每个块都有自己的头,这取决于它是文件还是JSON数据。
这真的是在PHP中实现它的唯一方法吗? 在PHP方面,PUT端点通常不应该是多部分吗? 我错过了什么吗?