我的wordpress网站上有一个表单,该表单使用jsPDF转换为PDF,然后在提交时应保存到服务器。
我收到一条成功消息,但PDF似乎没有保存到所需的文件夹。我找不到PDF的位置,甚至根本找不到它
代码
在functions.php中注册Ajax命令:
function eazy_scripts() {
wp_register_script('js-pod', get_stylesheet_directory_uri() . '/js/POD.js', array('jquery'),'1.1', true);
wp_enqueue_script('js-pod');
wp_localize_script( 'js-pod', 'jspod', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'admin_enqueue_scripts', 'eazy_scripts' );
JS
$( "#pdfsubmit" ).click(function() {
alert("Submitted");
sendToServer();
});
function sendToServer() {
console.log("#pdfsubmit clicked");
var pdf = new jsPDF('p', 'pt', 'a4');
pdf.addHTML(document.getElementById("product_sheet"), function() {
ps_filename = "generated-product-sheet";
var file = btoa(pdf.output());
var formData = new FormData();
formData.append('data', file);
$.ajax({
url: jspod.ajax_url+'?action=so56917978_upload',
data: formData,
processData: false,
contentType: false,
type: 'POST',
success: function(data){
alert(data);
}
});
});
}
将PDF保存到服务器的PHP:
add_action( 'wp_ajax_so56917978_upload', 'so56917978_upload_callback' );
add_action( 'wp_ajax_nopriv_so56917978_upload', 'so56917978_upload_callback' );
function so56917978_upload_callback() {
if ( ! empty( $_POST['data'] ) ) {
$data = base64_decode($_POST['data']);
file_put_contents( get_stylesheet_directory_uri() . '/POD/pod.pdf' , $data );
echo "success";
} else{
echo "No Data Sent";
}
echo 'got there';
die();
}
如前所述,我收到成功消息,但似乎什么也没有保存。
字母字符串看起来像base64字符串,并且看起来很长。比图片中显示的要长得多。
我想知道PHP是否不足以对其进行解码然后保存?
答案 0 :(得分:1)
您正在使用get_stylesheet_directory_uri()
来返回目录URL,
使用get_stylesheet_directory()
获取样式表目录的实际路径。
尝试将功能更改为此,并检查ajax请求的响应
function so56917978_upload_callback() {
$res = [
'saved' => 0,
];
if ( ! empty( $_POST['data'] ) ) {
$pdf = get_stylesheet_directory() . '/POD/pod.pdf';
$data = base64_decode($_POST['data']);
file_put_contents( $pdf, $data );
$res['pdf'] = $pdf;
$res['saved'] = 1;
} else{
$res['error'] = 'No Data Sent';
}
wp_send_json( $res );
}