下面重点说一下 php curl 传参的文件的几种方法
先解释一下 aaa";filename="xxx
aaa 是对方要接收的参数
";filename=" 是固定格式
xxx 自己定义的名字,随意定义
要上传的文件资源在服务器本地
php 5.5之前
'filename' => "@"."./hll.jpg", // 5.5之前 这个方法没有试过
php 7.0
$postBody = [
'aaa' => curl_file_create("./hll.jpg",'image/jpeg',11),
'aaa";filename="xxx' => "./hll.jpg",
'aaa' => new \CURLFile("./hll.jpg","image/jpeg","filename"); // 使用CURLFile类
];
重点说一下 CURLFile 的参数也是可以使用通过 form表单提交的文件【$_FILES接收的参数】
$fileinfo = $_FILE['filename']; // 接收前端传过来的文件
$postBody = [
'aaa' => new \CURLFile($fileinfo['tmp_name'],$fileinfo['type'],$fileinfo['name']); // 使用CURLFile类
];
要上传的文件资源不在服务器本地
$content = file_get_contents($url); // 获取远程的图片资源
$postBody = [
'aaa";filename="xxx' => $content, // 远程文件的二进制
];
贴上代码
// 测试发送参数
public function test()
{
$url = 'https://dss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2534506313,1688529724&fm=26&gp=0.jpg';
$content = file_get_contents($url); // 获取远程的图片资源
$requestUrl = 'xxx/accept'; // 请求的地址
$fileinfo = $_FILE['filename']; // 接收前端传过来的文件
$postBody = [
'filename1";filename="filename1' => $content, // 远程文件的二进制
'filename2' => "@"."./hll.jpg", // 5.5之前
'filename3' => curl_file_create("./hll.jpg",'image/jpeg',11),// 5.5之后
'filename4' => new \CURLFile($fileinfo['tmp_name'],$fileinfo['type'],$fileinfo['name']); // 使用CURLFile类 【参数是前端传输过来的】
'filename5' => new \CURLFile("./hll.jpg",'image/jpeg',11); // 使用CURLFile类 【参数是本地文件】
'filename6";filename="filename6' => "./hll.jpg", // 本地
'uuid' => 111,
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postBody);
$data = curl_exec($ch);
$data = json_decode($data,1);
curl_close($ch);
return self::output(200, $data, '');
}
// 接收参数
public function accept()
{
$data['file'] = $_FILES;
$data['post'] = $_POST;
echo json_encode($data,1);
}