gpt4 book ai didi

php - HTTP Post 将多个文件从 iOS 上传到 PHP

转载 作者:行者123 更新时间:2023-11-29 01:36:59 25 4
gpt4 key购买 nike

在我的 iOS 应用程序中,我正在构建一个 NSData 用作 NSMutableURLRequest 的正文,以便我可以在一个 HTTP POST 中上传多个文件。

我的帖子正文内容如下所示(删除了文件数据并仅替换为字节数):

multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY
--0xKhTmLbOuNdArY
Content-Disposition: form-data; name="email"
myemailaddress@gmail.com
--0xKhTmLbOuNdArY
Content-Disposition: form-data; name="sqlite"; filename="backup.MyApp.v1.1.3-to-v1.1.3.1443578420.sqlite"
Content-Type: application/octet-stream

// ... data length: 880640

--0xKhTmLbOuNdArY--
Content-Disposition: form-data; name="sqliteshm"; filename="backup.MyApp.v1.1.3-to-v1.1.3.1443578420.sqlite-shm"
Content-Type: application/octet-stream

// ... data length: 32768

--0xKhTmLbOuNdArY--
Content-Disposition: form-data; name="sqlitewal"; filename="backup.MyApp.v1.1.3-to-v1.1.3.1443578420.sqlite-wal"
Content-Type: application/octet-stream

// ... data length: 3901672

--0xKhTmLbOuNdArY--

但是,当我收到这篇文章时,在 PHP 方面,我只看到了三个文件中的第一个。如果我把名为“sqlite”的文件放在第一位,那么在 PHP 端,我只会看到“sqlite”文件。如果我将名为“sqliteshm”的文件放在第一位,那么我只会在 $_FILES 数组中看到“sqliteshm”文件。

array (
'sqliteshm' =>
array (
'name' => 'backup.MyApp.v1.1.3-to-v1.1.3.1443578420.sqlite-shm',
'type' => 'application/octet-stream',
'tmp_name' => '/private/var/tmp/phpk1wyWb',
'error' => 0,
'size' => 32768,
),
)

文件大小匹配,无论我先放哪个,但只有第一个文件出现在 PHP 端。

为了在 PHP 端接收多个文件,我需要做一些特殊的事情吗?

或者我从 iOS 发送的多个文件是否错误?

最佳答案

简而言之,您的请求无效。

更详细地,请注意 --0xKhTmLbOuNdArY----0xKhTmLbOuNdArY 之间的区别。在 -- 末尾使用两个破折号的分隔符是终止符。因此,您的请求正文不会被解析到第一个终止符之外,而第一个终止符恰好在第一个文件之后。应该只有一个终止符 - 在您的请求的最后。

通常,在编写多部分表单数据请求时,您不应该重新发明轮子。只需使用经过验证和时间考验的库,例如 AFNetworking

关于php - HTTP Post 将多个文件从 iOS 上传到 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32857086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com