我用 PHP 开发了一个 REST API,它从 iPhone 应用程序获取 POST 请求数据。
我正在获取 JSON 格式的 POST 请求数据。我解码它并在 PHP 中使用它。到这里为止一切正常。
我的问题是关于通过 iPhone 应用程序上传文件的数据。如何在 PHP 中访问这个上传的文件数据?
如果文件是使用 enctype="multipart/form-data"
和 method=POST
从 HTML 表单上传的,我会在 $ 中获取上传文件的数据_FILES
数组。
最佳答案
你说:
If the file is uploaded from HTML form with
enctype="multipart/form-data"
andmethod=POST
I get data of uploaded file in$_FILES
array.
在 iOS 中,您可以创建一个 multipart/form-data
请求(请参阅这些 Stack Overflow 答案,分别在 Objective-C 和 Swift 中查看这是如何完成的)。如果这样做,则无需更改 PHP 代码,并且可以通过 PHP 的 $_FILES
变量访问上传的文件,就像从 HTML 表单访问一样。
但是之前你说:
I'm getting this POST request data in JSON format.
上面,我指出您可以从 iOS 代码创建一个 Content-Type
为 multipart/form-data
的请求,这将使文件可用通过 PHP 的 $_FILES
变量。但这意味着请求不会是 JSON。
如果您希望您的 Web 服务仅使用 JSON,那么 iOS 代码将改为创建一个 Content-Type
为 application/json
的请求。该请求的主体不会是多部分请求,而只是普通的 JSON。而且,如果您这样做,则 PHP 代码无法使用 $_FILES
,而是 json_decode
响应并从中解析数据。更糟糕的是,您不能在 JSON 元素值中包含任意二进制数据,因此 iOS 代码必须先将二进制数据转换为文本,然后再在创建请求时将其放入 JSON(例如通过 base-64),然后是 PHP 代码将获取 base 64 编码值,然后在保存之前对其进行解码。
坦率地说,这需要做更多的工作(由于 base-64 编码过程,请求将增加 33%),所以我倾向于让文件上传使用 multipart/form-data
前面概述了而不是创建基于 JSON 的文件上传过程。
关于php - 如何在 PHP 中访问/获取通过 iPhone 应用程序上传的文件的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28534933/