如何使用php代理转发请求的multipart/form-data格式的请求体

3
我希望使用php代理来解决上传文件时的跨域问题。在脚本中,我使用了php curl来转发请求和响应,但是当请求体为multipart/format-data格式时,我不知道如何将请求体转发到服务器。当Content-Type头部为"multipart/form-data"时,file_get_contents('php://input')将为空。当使用curl_setopt( $ch, CURLOPT_POSTFIELDS, $_POST) 时,请求体中的Content-Disposition可以被发送,但是文件的真实数据却不能被发送。
我的请求体如下:
------WebKitFormBoundaryd0tvwIvevPV4VTlP
Content-Disposition: form-data; name="name"

nbzdds.mp3
------WebKitFormBoundaryd0tvwIvevPV4VTlP
Content-Disposition: form-data; name="chunk"

15
------WebKitFormBoundaryd0tvwIvevPV4VTlP
Content-Disposition: form-data; name="chunks"

44

497161
------WebKitFormBoundaryd0tvwIvevPV4VTlP
Content-Disposition: form-data; name="file"; filename="blob"
Content-Type: application/octet-stream

��v\;"S�;-�mG\u#...
.
.
.

如果您可以选择的话,最好将文件上传到与此PHP脚本相同的服务器上,然后使用URI在远程服务器上进行curl操作以访问本地服务器上已上传的文件,这样远程服务器就可以下载该文件。 - wyqydsyq
实际上,文件将由客户提供,使用HTML的'file'元素。你是不是意思是我应该先在我的脚本服务器上缓存这个文件? - Hyden
是的,与其让上传脚本尝试将文件上传到远程服务器,不如让脚本将文件存储在本地,然后触发存储服务器上的下载脚本。您还可以将文件存储在本地,然后使用curl的FTP功能将文件从脚本服务器上传到存储服务器,这种方法非常理想,因为您可以让脚本在将文件发送到存储服务器后删除本地缓存副本。 - wyqydsyq
1个回答

0

理想情况下,您希望将上传的文件存储在本地,使用curl的FTP功能将文件从脚本服务器上传到存储服务器,然后删除脚本服务器上的缓存文件。

如果这不可能,可以向远程文件服务器上的脚本发送curl请求,该脚本应从原始服务器下载文件到自己。

虽然它可能不像直接将上传的文件发送到远程文件服务器那样快,但本质上是相同的,只是在上传到远程服务器时缓存了文件。这可能更好,因为上传的数据不会在整个操作期间存储在服务器的RAM中,如果同时上传大量文件可能会导致内存不足问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接