我有一个带有输入类型文件的HTML表单,我希望通过发送的电子邮件附上提交的文件。
事实是,我没有收到该文件,但所有其他信息,如姓名,电子邮件地址,电话号码都很快。
这是我的HTML(仅用输入文件简化):
<form enctype="multipart/form-data" id="contact-form-cv" name="contact-form-cv" method="POST" data-name="Contact Form CV">
<div class="form-group">
<div class="controls">
<!-- FILE -->
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
<input type="file" name="cv-file" id="file" class="input-file form-control special-form my-file">
<label for="file" class="btn btn-tertiary js-labelFile">
<span class="js-fileName"><i class="fa fa-upload"></i> Attach CV*</span>
</label>
<!-- Button -->
<button id="cv-valid-form" type="submit" class="btn btn-lg submit">Submit</button>
</div>
</div>
JS
我有一个JS文件,用于在用户填写表单时显示警告消息:
$("#contact-form-cv [type='submit']").click(function(e) {
e.preventDefault();
// Get input field values of the contact form
var cvuser_file = $('input[name=cv-file]').val();
// Datadata to be sent to server
post_data = {'cvuserFile':cvuser_file};
// Ajax post data to server
$.post('../contact-me-cv.php', post_data, function(response){
// Load json data from server and output message
if(response.type == 'error') {
...
} else {
...
}
}, 'json');
});
PHP
<?php
// Use PHP To Detect An Ajax Request
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
// Exit script for the JSON data
$output = json_encode(
array(
'type'=> 'error',
'text' => 'Request must come from Ajax'
));
die($output);
}
if(empty($_POST["cvuserFile"])) {
$output = json_encode(array('type'=>'error', 'text' => '<i class="icon ion-close-round"></i> Please attach your CV'));
die($output);
}
$path = 'upload/' . $_FILES["cvuserFile"]["name"];
move_uploaded_file($_FILES["cvuserFile"]["tmp_name"], $path);
require 'php/class/class.phpmailer.php';
$mail = new PHPMailer();
//Set PHPMailer to use SMTP.
$mail->IsSMTP();
//Set SMTP host name
$mail->Host = 'smtp.gmail.com';
//Set TCP port to connect to
$mail->Port = '587';
//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;
$mail->isHTML(true);
//Provide username and password yo your google account
$mail->Username = "*****@gmail.com";
$mail->Password = "*******";
$mail->WordWrap = 50;
$mail->From = $_POST["cvuserEmail"];
$mail->FromName = $_POST["cvuserName"];
$mail->setFrom('*****', '**** ****');
$mail->addAddress('*****', 'John Doe');
//Set the subject line
$mail->AddAttachment($path);
$mail->Subject = 'New message from my website!';
$mail->Body = 'Hello' . "\r\n" ;
if(!$mail->send())
{
$output = json_encode(array('type'=>'error', 'text' => '<i class="icon ion-close-round"></i> Oops! Looks like something went wrong, please check your PHP mail configuration.'));
die($output);
unlink($path);
}
else
{
$output = json_encode(array('type'=>'message', 'text' => '<i class="icon ion-checkmark-round"></i> Hello '.$_POST["cvuserName"] .', Your message has been sent, we will get back to you asap !'));
die($output);
}
?>
使用没有AJAX的表单可以顺利运行,但不能像上面那样使用它。
答案 0 :(得分:0)
您无法按照自己的方式通过Ajax上传文件。当您执行$('input[name=cv-file]').val()
时,您将获得文件名,但该文件未上传。
查看此帖子以获取有效方法:Sending multipart/formdata with jQuery.ajax