Я пытаюсь загрузить файл в установку WordPress, а затем отправить его вместе с другими данными из других полей формы в Рычаг API.
Я могу отправлять данные в конечную точку просто отлично, но не так сильно при загрузке файлов. Следующее действительно выполняет загрузку в wp-content / uploads, но я думаю, что проблема заключается либо в следующей строке move_uploaded_file
или где я передаю его в $data
массив.
<form enctype="multipart/form-data" method="post" action="<?php echo get_template_directory_uri(); ?>/jobForm.php">
<input type="file" name="resume">
<button type="submit">Submit</button>
</form>
<?php
// URL
$url = "https://api.lever.co/v0/postings/XXXX/XXXXXX";
$name = $_POST["name"];
$email = $_POST["email"];
$urls = $_POST["urls"];
$target = "/www/wp-content/uploads/" . basename($_FILES["resume"]["name"]);
move_uploaded_file($_FILES["resume"]["tmp_name"], $target);
// data
$data = array(
"name" => $name,
"email" => $email,
"urls" => $urls,
"resume" => @$_FILES["resume"]
);
// initiate curl instance, set options, and post
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // url
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // full data to post
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // return results as a string instead of outputting directly
echo $data["resume"];
// $output
$output = curl_exec($ch);
var_dump($output);
// close curl resource to free up system resources
curl_close($ch);
?>
Я пытался использовать $target
переменная для "resume"
$data
значение, но это тоже не сработало. Как вы, вероятно, можете сказать, я не совсем уверен, где это идет не так (я разработчик внешнего интерфейса из моего элемента: D).
Вторя $data["resume"]
дает массив, повторяя $target
дает местоположение + имя файла, как и ожидалось. Я думаю, я не уверен какие Мне нужно пройти через в $data
массив … Есть идеи, что я здесь делаю не так? Если это помогает, я не получаю ошибку от Lever при отправке. На самом деле, он возвращает сообщение 200 OK и отправляет сообщения просто отлично, просто без поля резюме!
Вы можете сделать это так
$localFile = $_FILES[$fileKey]['tmp_name'];
$fp = fopen($localFile, 'r');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'someurl' . $strFileName); //$strFileName is obvious
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 86400);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'CURL_callback');
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localFile));
curl_exec ($ch);
if (curl_errno($ch)) {
$msg = curl_error($ch);
}
else {
$msg = 'File uploaded successfully.';
}
curl_close ($ch);
$return = array('msg' => $msg);
echo json_encode($return);
Других решений пока нет …