在PHP中如何access/get通过iPhone应用程序上传的文件的数据?

How to access/get data of the file uploaded through iPhone app in PHP?

我在 PHP 中开发了一个 REST API,它从 iPhone 应用程序获取 POST 请求数据。

我正在以 JSON 格式获取此 POST 请求数据。我解码它并在 PHP 中使用它。到这里为止一切正常。

我的问题是关于通过 iPhone 应用上传文件的数据。如何访问 PHP 中上传的文件数据?

如果文件是从 HTML 表单上传的 enctype="multipart/form-data"method=POST 我会在 $_FILES 数组中获取上传文件的数据。

你说:

If the file is uploaded from HTML form with enctype="multipart/form-data" and method=POST I get data of uploaded file in $_FILES array.

在 iOS 中,您可以创建一个 multipart/form-data 请求(请参阅这些 Stack Overflow 答案,分别了解如何在 Objective-C and Swift 中完成此操作)。如果这样做,则无需更改 PHP 代码,并且可以通过 PHP 的 $_FILES 变量访问上传的文件,就像来自 [=38] =]表格.

但你之前说:

I'm getting this POST request data in JSON format.

上面,我指出您可以从 iOS 代码创建一个 Content-Typemultipart/form-data 的请求,这将使文件可通过 PHP的 $_FILES 变量。但这意味着请求不会是 JSON。

如果您希望您的 Web 服务仅使用 JSON,则 iOS 代码将改为创建 Content-Typeapplication/json 的请求。该请求的正文不会是多部分请求,而只是普通的 JSON。而且,如果您这样做了,那么 PHP 代码将无法使用 $_FILES,而是 json_decode 响应并从中解析数据。更糟糕的是,您不能在 JSON 元素值中包含任意二进制数据,因此 iOS 代码在创建请求时必须先将二进制数据转换为文本,然后再将其放入 JSON (例如通过 base-64)然后 PHP 代码将获取 base 64 编码值,然后在保存之前对其进行解码。

坦率地说,这需要做更多的工作(由于 base-64 编码过程,请求将增加 33%),所以我倾向于让文件上传使用 multipart/form-data 之前概述,而不是创建基于 JSON 的文件上传过程。