在php中处理文件上传后,我正在尝试使用curl将该文件发送到使用Slim Framework的rest api。但是,$ _FILES在到达Slim中的函数时总是为空。
sender.php
if(move_uploaded_file($_FILES['myFile']["tmp_name"], $UploadDirectory . $_FILES['myFile']["name"] ))
{
$ch = curl_init();
$data = array('name' => 'test', 'file' => $UploadDirectory . $_FILES['myFile']["name"]);
curl_setopt($ch, CURLOPT_URL, 'http://localhost/slimlocation/upload/');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
}
在Slim中接收请求的函数:
$app->post('/upload/', function() use ($app) {
if(isset($_FILES)){
// count is always zero
echo count($_FILES);
}
});
我是否错误地发送了文件和/或是否可以执行我正在尝试的操作?任何帮助表示赞赏。
答案 0 :(得分:1)
据我所知,您需要使用更多选项来使用curl上传文件。请参阅here。
查看 CURLOPT_UPLOAD 选项和 CURLOPT_POSTFIELDS 的说明,它表示您需要在文件名之前使用@来上传(并使用完整路径)
答案 1 :(得分:0)
这些是我需要的改变并且有效:
$filepath = str_replace('\\', '/', realpath(dirname(__FILE__))) . "/";
$target_path = $filepath . $UploadDirectory . $FileName;
$data = array('name' => 'test', 'file' => '@'.$target_path);