使用PHP curl上传文件的两种方法:指定文件名和直接上传文件内容

指定文件名的方式


关键代码如下:

    $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . http_build_query($query));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($s, CURLOPT_POSTFIELDS, array(‘file’=>’@’.$filePath));
$json = curl_exec($ch);
curl_close($ch);

读取文件内容


很多时候,文件内容并不在本地,例如从其他服务器拉取的图片,这个时候要用一些hack

关键代码如下:

    $ch = curl_init();
$file = file_get_contents($picUrl);
curl_setopt($ch, CURLOPT_URL, $url . http_build_query($query));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(‘file”;filename=”‘ => $file));
$json = curl_exec($ch);
curl_close($ch);

‘file”;filename=”‘ 中的file为服务器指定参数,在其后加上一段 “;filename=” ,注意双引号和分号不能丢,

filename=后面的文件名可省略,也可以随便加几个字母,例子中省略了,测试可以上传成功。

 

最近使用 百度PCS REST API 上传文件到百度网盘时用的就是第二种方法。