我正在尝试将带有一些文本输入字段的表单发布到我的api,我还想同时将文件上传到服务器。我做了一些研究,并根据各种网站的建议提出了以下代码,但它似乎没有用。
第一种方法:
$cfile = new CURLFile('/home/xyz/myimge.jpg', 'image/jpeg', 'mymage.jpg');
$params = array(
"userid_id" => "some id #",
"file" => $cfile,
"name" => "test_file",
"gallery" => "myalbum"
);
$uri = 'http://myserver.com/somedir/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response_data = curl_exec($ch);
//var_dump(curl_getinfo($ch));
//var_dump($response_data);
curl_close( $ch );
unset( $ch );
第二种方法:
$cfile = new CURLFile('/home/xyz/myimge.jpg', 'image/jpeg', 'mymage.jpg');
$params = array(
"userid_id" => "some id #",
"name" => "test_file",
"gallery" => "myalbum"
);
$params = array('item' => http_build_query($params), 'file' => $cfile );
$uri = 'http://myserver.com/somedir/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response_data = curl_exec($ch);
//var_dump(curl_getinfo($ch));
//var_dump($response_data);
curl_close( $ch );
unset( $ch );
根据文档,将数组传递给CURLOPT_POSTFIELDS会将数据编码为multipart / form-data。我应该将我的表单字段作为$ _POST数组,并将上传的文件作为$ _FILES数组。使用这两种方法,我在接收php模板中获取所有表单字段作为后期变量,但我没有得到该文件。
当我检查ccurl_getinfo输出的content_type时,我看到它是: [" CONTENT_TYPE"] => string(9)" text / html" 而不是" multipart / form-data"正如文档中所建议的那样。将content_type显式设置为" multipart / form-data"使用curl_setopt也没有任何效果。
许多论坛建议使用'。'。文件名格式来提交文件,但根据PHP文档,这似乎已被弃用。我在PHP 5.5上,建议上传文件的方法是形成一个CURLFile对象,这就是我在这里做的。 任何人都可以在上面的代码中提出错误吗?
答案 0 :(得分:0)
似乎你的方法很完美,但有一个愚蠢的错误。 您可以尝试添加额外的标头信息。希望它能奏效。
$headers = array("Content-Type:multipart/form-data");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);