PHP代理 - 使用cURL上传文件

时间:2014-03-23 19:25:48

标签: javascript php angularjs curl laravel

我目前正在构建一个用AngularJS编写的应用程序,后端使用基于Laravel的API,数据通过一个简单的PHP代理传递,以保证我的API密钥安全(ish)。

对于POST请求代理只需json_decode PHP输入流(php://输入)作为Angular将POST数据序列化为JSON,将其传递给http_build_query然后通过cURL将其转发到API - 所以它一直在完美地运作。

我已设法将文件转到代理 - 但是,由于它是使用multipart/form-data标头发送的,因此它仅在$_FILES中可用,而不是输入流。

以下代理的相关摘要:

function curlRequest($url, $post = false, $data = null)
{
  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  if($post == true) {
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  }

  $data = curl_exec($ch);
  $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

  curl_close($ch);
}

$data = json_decode(file_get_contents('php://input'), true);
$data['api_key'] = API_KEY;

// File data available here!
var_dump($_FILES);

$result = curlRequest(URL, true, $data);

我遇到的问题,我不确定如何在$_FILES中获取文件后将文件正确地发布到API端点。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

这也可以发送文件:

$data = json_decode(array_merge($_REQUEST, $_FILES));
$data['api_key'] = API_KEY;

// File data available here!
var_dump($_FILES);

$result = curlRequest(URL, true, $data);