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; }
时间: 2024-11-17 01:41:38