gpt4 book ai didi

javascript - 如何通过ajax发送自动生成的pdf文件

转载 作者:搜寻专家 更新时间:2023-10-31 21:50:28 25 4
gpt4 key购买 nike

我用 jsPDF 生成了一个 pdf 对象。我想发送带有 AJAX 附加 PDF 的邮件,但我无法正确发送文件。我尝试在 Blob 对象中转换以发送,稍后在 PHP 中我尝试解码为 base64 以便可以通过邮件发送,但是当我收到邮件时,我收到的是没有扩展名的 blob 文件。

1.- 我创建 PDF 对象:

var pdf = new jsPDF(); // new pdf object
pdf.text("Table title", 14, 16); // text line
var elem = $(".tableSample")[0]; // node -> html to pdf
var res = pdf.autoTableHtmlToJson(elem); // lib to transform htmlTables to pdf
pdf.autoTable(res.columns, res.data, {startY: 20}); // lib to transform htmlTables to pdf

var outputBase64 = pdf.output('datauristring');
var blob = new Blob([outputBase64], { type: "application/pdf"});

2.- 我调用我的 Ajax 函数:

ajaxAdjunto({
controler : "ctInformes2.php",
method : "enviarInforme",
attached : blob,
paramValid : {
mailText : "This is the mail body",
mailAsunto : "Este es el asunto",
mailDest : "mailTo@mailTo.com"
},
callbackSucces : function (backParam) { },
callbackError : function (err) { }
});

3.- 我的 Ajax 函数已准备好发送带有 FormData 对象的附件:

function ajaxAdjunto(objParam){ 
url = "./controller/"+objParam.controler+"?metodo="+objParam.method;
param = new FormData();
//Add to FormData mail text
for (var item in objParam.paramValid){
if (item == ""){
param.append(item , "null");
}else{
param.append(item , objParam.paramValid[item ]);
}
}
//Add to FormData file
param.append("adjunto", objParam.attached);
//Call Ajax
$.ajax({
data: param,
type: "POST",
url: url,
cache: false,
contentType: false,
processData: false,
success: function (backParam) {
objParam.callbackSucces(backParam, objParam);
},
error: function (xhr){
if ( objParam.callbackError ){
objParam.callbackError(xhr);
}else{
alerta(xhr.statusText);
console.log(xhr);
}
}
});
}

PHP 代码 -(我删除了此示例的其他 $body 内容和邮件 header )

// var_dump -> $_FILES['attached']
array (size=5)
'name' => string 'blob' (length=4)
'type' => string 'application/pdf' (length=15)
'tmp_name' => string 'C:\Windows\Temp\php9593.tmp' (length=27)
'error' => int 0
'size' => int 6328

// PHP CODE
if ( count($_FILES) > 0 ){
$nameFile = $_FILES['attached ']['name'];
$sizeFile = $_FILES['attached ']['size'];
$typeFile = $_FILES['attached ']['type'];
$tempFile = $_FILES["attached "]["tmp_name"];

$body .= "--=C=T=E=C=\r\n"; // delimiter
$body .= "Content-Type: application/octet-stream; ";
$body .= "name=" . $nameFile . "\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n";
$body .= "Content-Disposition: attachment; ";
$body .= "filename=" . $nameFile . "\r\n";
$body .= "\r\n"; // empty line

$fp = fopen($tempFile, "rb");
$file = fread($fp, $sizeFile);
$file = chunk_split(base64_encode($file));

$body .= "$file\r\n";
$body .= "\r\n"; // empty line
}
$body .= "--=C=T=E=C=--\r\n"; // delimiter end mail

//Send mail
if(mail($mailTo, $subject, $body, $header)){
echo "mail was sent";
}else{
echo "error when try send mail";
}

最佳答案

您在此处指定电子邮件附件文件名:

$body .= "name=" . $nameFile . "\r\n";

变量$nameFile 包含上传文件的名称,它以字符串“blob”的形式提供。由于它没有文件名,因此您可以逐字使用它。

要更改它,请提供更有用的文件名并将其设置在该行中。

在以下问答资源中概述了使用 Javascript 向其提供表单数据的一种方法:"How to give a Blob uploaded as FormData a file name?"

关于javascript - 如何通过ajax发送自动生成的pdf文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44613818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com