Здравствуйте. Прошу помочь. На сайте есть форма для вакансий. Все поля работают. Потребовалось отправлять текстовый файл с резюме. Вроде всё сделал правильно, но при отправки данных с формы (если мы загрузили файл) появляется ошибка. Без загрузки файла всё работает.
Ошибка в консоли "Swift_IoException in FileByteStream.php line 144: Unable to open file for reading". Файл хранится во временной папке и не сохраняется после отправки (это мне нужно). Я попробовал закинуть файл на сервер и при отправке почты прописать вручную путь до файла для attach("/папки сервера/tmp/php/uploads/phpfoeu5Y/resume.docx") то файл прикрепляется и приходит на почту. Но если я засуну этот же путь в переменную $path = "/папки сервера/tmp/php/uploads/phpfoeu5Y/resume.docx"; и выведу attach($path) то мне выдаст ошибку. Помогите пожалуйста, укажите мне на мою ошибку.
<form action="/ajax/vacancy" class="pop_form" id="form-resume" enctype="multipart/form-data" data-id="vacancy" onsubmit="sendVacancy(this, event)">
<div class="f_tit">Отклик на вакансию</div>
<div class="row_form_information_vacancy">
<div class="form_information_vacancy">
<input type="text" name="name_vacancy" value="" class="form_information_vacancy_name" readonly>
<input type="text" name="wages" value="" class="form_information_vacancy_wages" readonly>
</div>
</div>
<input type="file" name="ypicture" id="ypicture" value="" style="display:none;">
<fieldset class="form_block_vacancy">
<label>
<input type="text" name="name" value="" placeholder="Имя, фамилия" class="f_field form_input_vacancy_name">
</label>
</fieldset>
<fieldset class="form_block_vacancy">
<label>
<input type="text" name="phone" value="" placeholder="Телефон" class="f_field form_input_vacancy_phone">
</label>
</fieldset>
<fieldset class="form_block_vacancy">
<label>
<input type="text" name="email" value="" placeholder="E-mail:" class="f_field form_input_vacancy_mail">
</label>
</fieldset>
<fieldset class="form_block_vacancy">
<label>
<textarea name="text" cols="30" rows="5" placeholder="Комментарий:" class="f_ta form_textarea_vacancy"></textarea>
</label>
</fieldset>
<div class="attach-file-wrap" style="display:none;">
<label class="text attach-file" for="file">
<img src="/images/resume.png">
<div class="fileLabel">Прикрепите файл формата doc, docx или pdf размером не более 10 Мб</div>
<div class="fileLabel2 hide"></div>
</label>
<input class="text attach-file-input file" type="file" name="file">
</div>
<div class="policy policy_form_vacancy">Нажимая кнопку «Отправить», вы подтверждаете свое согласие на обработку <a href="/policy" target="_blank" style="color: #000">персональных данных</a></div>
<input type="submit" name="" value="Отправить" class="f_btn">
</form>
Код JavaScript:
function sendAjaxResume(t,e,i,n){
e=e||{},"undefined"==typeof n&&(n="json");
var formData = new FormData($('#form-resume')[0]);
$.ajax({
url:t,
data: formData,
dataType:n,
processData: false,
contentType: false,
type:"post",
dataType: 'json',
beforeSend:function(t){
return t.setRequestHeader("X-CSRF-Token",$("meta[name='csrf-token']").attr("content"))
},
success:function(t){
"function"==typeof i&&i(t)
},
error:function(t,e,i){
alert("Не удалось выполнить запрос! Ошибка на сервере.");
}
})
}
function sendVacancy(t,e,id,site){
e.preventDefault(),t=$(t);
var i=t.serialize(),n=$(t).attr("action");
t.find(".err-msg-block").remove();
sendAjaxResume(n,i,function(e)
{
if("undefined"!=typeof e.errors)
{
applyFormValidate(t,e.errors);
var i=[];
for(var n in e.errors)i.push(e.errors[n]);
var o=i.join("<br />");
t.find(".f_tit").after('<div class="err-msg-block">'+o+"</div>")
} else {
resetForm(t),popup("Спасибо за письмо, в ближайшее время мы Вам ответим!");
}
})
}
Код PHP:
public function postVacancy() {
$data = Request::only(['name', 'phone','email','text','name_vacancy','wages']);
$valid = Validator::make($data, [
'name' => 'required',
'phone' => 'required',
'email' => 'required',
], [
'name.required' => 'Не заполнено поле Имя',
'phone.required' => 'Не заполнено поле Телефон',
'email.required' => 'Не заполнено поле e-mail',
]);
if ($valid->fails()) {
return ['errors' => $valid->messages()];
} else {
$path = $_FILES["file"]["tmp_name"].'/'.$_FILES["file"]["name"];
$feedback_data = [
'type' => 10,
'data' => $data
];
$feedback = Feedback::create($feedback_data);
Mail::queue('mail.callback', ['feedback' => $feedback], function ($message) use ($feedback) {
$title = $feedback->id . ' | Вакансия | ';
$message->from($this->fromMail, $this->fromName)
->to(Settings::get('feedback_email'))
->subject($title);
$message->attach($path);
});
return ['success' => true];
}
}