从终端执行此curl命令正在运行,我正在收回我的结果。
curl -F "file=@/var/www/html/uploads/fb5bc34e1f0f03c759e92010f6a1a302_modified.csv" http://10.0.0.106:8089/uploadAndMatch/ -o ~/out.txt
但是当使用以下代码从PHP尝试时,我得到400 httpcode:
$request = curl_init('http://10.0.0.106:8089/uploadAndMatch/');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request,
CURLOPT_POSTFIELDS,
array(
'file' => '@/var/www/html/uploads/fb5bc34e1f0f03c759e92010f6a1a302_modified.csv'
));
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
$httpcode = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo $httpcode;
curl_close($request);
我还尝试添加标题:
$header = array('Content-Type: multipart/form-data');
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
但它仍然是同样的错误! 400 bad request
有什么想法吗?
这不是调试问题,而是因为php5.5 +中的changes
答案 0 :(得分:0)
问题是来自PHP的curl命令没有读取文件内容,但它正在读取文件的路径作为post参数。
$request = curl_init('http://10.0.0.106:8089/uploadAndMatch/');
// send a file
curl_setopt($request, CURLOPT_POST, true);
$fileName = explode("/", $file);
$fileName = end($fileName);
if (function_exists('curl_file_create')) { // php 5.5+
$cFile = curl_file_create($file,'text/csv',$fileName );
} else { //
$cFile = '@' . realpath('/var/www/html/uploads/ss.csv');
}
$post = array('file'=> $cFile);
curl_setopt($request,CURLOPT_POSTFIELDS,$post);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
我解决的第二个问题是curl_create_file($fileName)
中的文件作为完整路径发送到服务器并使用curl_file_create($filename, $mimetype = '', $postname = '')
为我修复了它。