javascript - 如果我只有 PDF URL,如何将 PDF 作为附件发送
问题描述
我有一个离子应用程序,它根据用户的输入进行某些计算。计算后,结果通过 API(generatePDF) 调用转换为 PDF。另一个要求是通过电子邮件发送相同的 PDF。一个 API(sendMail) 也是为此而生的。enctype='multipart/form-data'在 sendMail API 的标头部分中设置。
我现在有了 PDF URL,我得到了作为 generatePDF API 的响应。使用此 URL 如何将 PDF 附加到我打算发送的邮件中?
有人可以帮忙吗?
解决方案
谢谢@MissakBoyajian 的帮助。这就是我所做的。
为 ionic native 安装文件传输和文件插件
this.platform.ready().then(() => {
const fileTransfer: FileTransferObject = this.transfer.create();
const pdfLocation = this.pdffile;//pdffile is the PDF URL which we got as the response from the generatePDF API
fileTransfer.download(pdfLocation, this.storageDirectory + "filename.pdf").then((entry) => {
const alertSuccess = this.alertCtrl.create({
title: `Download Succeeded!`,
subTitle: `PDF was successfully downloaded to: ${entry.toURL()}`,
buttons: ['Ok']
});
alertSuccess.present();
this.file.readAsDataURL(this.storageDirectory, 'filename.pdf')
.then((datafile) =>{
this.attachpdf(id,datafile);
})
.catch((err) =>{
console.log("Error is that "+err);
});
}, (error) => {
const alertFailure = this.alertCtrl.create({
title: `Download Failed!`,
subTitle: `PDF was not successfully downloaded. Error code: ${error.code}`,
buttons: ['Ok']
});
alertFailure.present();
});
});
使用一个函数(我从搜索中获得)将 base64data 转换为 blob。
public dataURItoBlob(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteString = atob(dataURI.split(',')[1]);
else
byteString = unescape(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
}
然后,
public attachpdf(emailid,filetoattach){
let headers = new Headers();
headers.append(...);
headers.append('enctype','multipart/form-data');
var blob = this.dataURItoBlob(filetoattach);
var data ={... };
var formData = new FormData();
formData.append("data",JSON.stringify(data));
formData.append("doc",blob);
this.http.post('sendMail API',formData, {headers: headers})
.map(res => res.json())
.subscribe(results => {
...
},
error=>{
..
}
)
}
它终于奏效了。
推荐阅读
- tensorflow - 在同一个图中恢复两个 tensorflow 模型
- r - 修复闪亮的侧边栏
- c++ - 使用库时运行时检查失败 #0
- ansible - Ansible如何复制到具有动态后缀的目标文件夹
- javascript - 无法将 .then() 内部的值获取到全局变量
- react-native - Stylesheet.create 返回对象而不是数字
- c++ - cout<<4%-8的输出如何;是 4?
- python - Python polyfit:评估从给定 Y 预测 X 的误差
- ffmpeg - 如何在 yocto 中编译 ffmpeg 以获得可用的二进制文件
- f# - F# 模块的 mdoc 错误:无法解析类型“Microsoft.FSharp.Core.SourceConstructFlags”