【问题标题】:How to forward multipart/form-data body of request using a php proxy如何使用 php 代理转发请求的 multipart/form-data 正文
【发布时间】: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 功能将文件从脚本服务器上传到存储服务器,这种方法非常理想,因为您可以让脚本在发送后删除文件的本地缓存副本到存储服务器。

标签: php curl upload proxy


【解决方案1】:

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

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

它可能不如将上传的文件直接发送到远程文件服务器那么快,但它本质上是相同的,只是您在将文件上传到远程服务器时在本地缓存文件。无论如何,这可能会更好,因为上传的数据不会在整个操作过程中存储在服务器的内存中,如果同时上传大量文件,这可能会导致内存不足的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多