PHP cURL:从表单上传文件到远程API?

Ric*_*ard 0 php file-upload

我正在尝试在我的网站上的表单上传文件,然后将其传递给远程API.

这是我的PHP:

$fields = array(
    'file'=>$_FILES["mediaupload"],
    'username'=>urlencode($_POST["username"]),
    'password'=>urlencode($_POST["password"]),
    'latitude'=>urlencode($_POST["latitude"]),
    'longitude'=>urlencode($_POST["longitude"]),
);
$fields_string = http_build_query($fields);
$url = my_url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec ($ch);
Run Code Online (Sandbox Code Playgroud)

目前我不断收到错误消息,说明无法正确处理文件.API期望所有字段都作为POST字符串,除了文件,它在二进制文件中期望.

我知道如果没有访问远程API的话,调试这个很难,但是我做了什么明显的错误,或者这应该有用吗?

非常感谢.

Mri*_*ria 5

使用curl上传文件不会像这样工作.您需要先使用php在本地保存文件,move_uploaded_file然后获取文件路径.在字段中添加这个,

$fields = array(
    'file'=>"@/path/to/myfile.ext",
    'username'=>urlencode($_POST["username"]),
    'password'=>urlencode($_POST["password"]),
    'latitude'=>urlencode($_POST["latitude"]),
    'longitude'=>urlencode($_POST["longitude"]),
);
Run Code Online (Sandbox Code Playgroud)

另外,我不确定是否需要将字段数组转换为字符串以用作postfields.根据手册,它可以直接使用array().

CURLOPT_POSTFIELDS在HTTP"POST"操作中发布的完整数据.要发布文件,请在文件前加上@并使用完整路径.可以通过使用格式为'; type = mimetype'的类型的文件名来明确指定文件类型.此参数可以作为urlencoded字符串传递,如'para1 = val1¶2 = val2&...',也可以作为数组传递,字段名称为键,字段数据为值.如果value是数组,则Content-Type标头将设置为multipart/form-data.从PHP 5.2.0开始,使用@前缀传递给此选项的文件必须采用数组形式才能工作.