PHP Curl 上传文件

有时候会遇到上传文件给第三方服务的情况,比如本身程序并不需要存储附件,而是把附件发送给一个公共的服务。

最近正好碰到这个问题,记录一下。

上代码。

发送端:

<?php

// 接口地址
$api = 'http://api.example.com/uploadfile';
$file = $_FILES['file'];//保存$_FILES到变量中。

// 此处可能存在上传失败等问题,需验证$_FILES["file"]["error"]。
// 做业务对应的规则验证,如文件格式,文件大小等。

// 创建一个 cURL 句柄
$ch = curl_init($api);

// 创建一个 CURLFile 对象
// 上传文件的路径,文件的Mimetype,文件名
$cfile = curl_file_create($file['tmp_name'],$file['type'],$file['name']);

$data = [
	'type'=>'image',
	'data'=>$cfile
];

// 设置 POST 数据
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$resp = curl_exec($ch);

if(!$resp) {
  die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
} else {
  echo "Response HTTP Status Code : " . curl_getinfo($ch, CURLINFO_HTTP_CODE);
  echo "\nResponse HTTP Body : " . $resp;
}

// Close request to clear up some resources
curl_close($ch);

接收端:

<?php 
var_dump($_FILES);// 接收文件内容
va_dump($_POST);// 接收type

前端:

前端可使用Form或其他Ajax方式上传。