【发布时间】:2012-01-19 00:10:18
【问题描述】:
我想使用php代理来解决上传文件时的跨域问题。 在脚本中,我使用 php curl 转发请求和响应,但是当请求正文为 multipart/format-data 时,我不知道如何将请求正文转发到服务器。 当 Content-Type 标头为“multipart/form-data”时,file_get_contents('php://input') 将为 null。 而使用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 卷曲远程服务器到本地上传的文件服务器,然后远程服务器可以下载文件。
-
实际上该文件将由客户端提供,使用 html 的 'file' 元素。你的意思是我应该先在我的脚本服务器上缓存文件吗?
-
是的,与其让上传脚本尝试将其上传到远程服务器,不如让脚本将文件存储在本地,然后它应该触发存储服务器上的下载脚本。您也可以将文件存储在本地,然后使用 curl 的 FTP 功能将文件从脚本服务器上传到存储服务器,这种方法非常理想,因为您可以让脚本在发送后删除文件的本地缓存副本到存储服务器。