1、在调用时需要对各个参数进行 urlencode;
2、注意 header 参数,首先我们使用 postman 工具调用一下这个接口,并获取其 request 的 header 将有用的 header 用起来(多试几次);
3、注意不同版本的 php 文件上传是需要的配置。
代码分析
/**
* 注意:1、参数除了文件都要 urlencode 一下;2、注意header;3、curl_file_create 函数
* @param $File 文件路径
* @param int $Level
* @param string $convertType
* @return bool
*/
public static function file2jpeg($File,$Level = 2,$convertType = "GHOSTSCRIPT" ){
$FileName = urlencode(basename($File));
$url = "http://******";
$curl = \Request::forge($url, 'curl');
\Fuel\Core\Log::debug("url1 = [ $url ]");
// 有用的 header
$header = array (
"User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36",
);
// 所需的参数
$field = array(
'File' => Service_Util::curl_file_create($File),
'Level' => urlencode($Level),
"convertType"=>urlencode($convertType),
"FileName" => urlencode($FileName)
);
\Fuel\Core\Log::debug("url2 = [ $url ]");
// 配置
$curl->set_options(array(
CURLOPT_RETURNTRANSFER=>1,
CURLOPT_POST=>true,
CURLOPT_HTTPHEADER => $header,
CURLOPT_POSTFIELDS=>$field,
CURLOPT_INFILESIZE=>filesize($File)
));
$result = $curl->execute();
$dir = \Fuel\Core\Config::get('file_store_dir');
$path = Service_Util::getName($dir."/".$field['FileName']);
file_put_contents($path.".zip",$result);
return true;
}
/**
* 去除文件后缀
* @param $fileName 文件
*/
public static function getName($fileName){
$index = strrpos($fileName,".");
if ($index>0){
return substr($fileName,0,$index);
}
return $fileName;
}
/**
* curl 文件上传兼容函数
* @param $filename
* @param string $contentType
* @return CURLFile|string
*/
public static function curl_file_create($filename, $contentType = '') {
if (function_exists('curl_file_create')) {
return curl_file_create($filename, $contentType, basename($filename));
}
$value = "@{$filename};filename=" . basename($filename);
if ($contentType) {
$value .= ';type=' . $contentType;
}
return $value;
}