我可以成功将制表表导出到 Excel 并将其作为文件存储在本地计算机上。但是我不知道如何将 Excel 对象发送到服务器。
在保存到本地计算机并将其发送到服务器端之前,如何将制表器 Excel 转换为 Base64?
我已经对 jsPdf 做了同样的事情并使用以下方式发送 pdf:
doc.output('datauristring').
成功的场景应该是:
1. 生成excel对象(在客户端)
2. 将其转换为base64 Uri(在客户端)
3.发送到服务器端(node.js)
4.再次转换为文件(使用fs.写入本地路径)
任何帮助将不胜感激!
提前致谢!
UPDATE
下面我给大家介绍一下发送pdf到服务器的工作场景。必须对 xlsx 执行同样的操作。我尝试在保存到本地客户端计算机之前将制表器对象存储到变量,但没有成功。
table.download("xlsx", "test.xlsx", {sheetName:"testName"});
PDF 工作场景
- 在客户端创建 PDF
function canvasRun(){
// SYSTEM DATE TO ADD AS NAME
var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0');
var yyyy = today.getFullYear();
today = dd+ '-' + mm + '-' +yyyy;
html2canvas(document.getElementById("grid")).then(function(canvas) {
//var doc = new jsPDF("l","mm","a4",true); //landscape, millimetre, A4, pdfCompression
var width = doc.internal.pageSize.getWidth();
var height = doc.internal.pageSize.getHeight();
var img = canvas.toDataURL('image/png');
doc.text("Test1 : "+ today, 110, 15); // TEXT AT THE CENTER OF REPORT
doc.text('Test2 : '+ grandTotal +' mm', 200, 15); // TEXT AT THE CENTER OF REPORT
doc.addImage(logo, 'PNG', 10, 1, 38, 20,'FAST');// MARGINS LEFT,TOP,WIDTH,HEIGHT
doc.addImage(img, 'JPEG', 10, 20,width-20, height-20,'','FAST');
doc.save('testReport-'+today+'.pdf'); // DOWNLOAD TO LOCAL COMPUTER
});//HTMLCanvas end
flagGeneratedPdf=1;
}
- 发送PDF到服务器端
function sendToServer(){
// CONVERT PDF FILE TO BASE64 STREAM URI
var convPDF= doc.output('datauristring');
// LOAD URI PDF TO OBJECT
var obj = new Object;
obj.attachment=convPDF;
.....
.....
//method to send data to server
}
- 服务器接受对象并处理它
function dataFromClient(attachment){
// CONVERT INCOMING URi TO base64 FILE AND REMOVE MIME TYPE FROM HEADER
let base64String = attachment;
let base64pdf = base64String.split(';base64,').pop();
// GENERATE PDF LOCAL SERVER FILE, IF EXIST REPLACE...
fs.writeFile("test.pdf", base64pdf,{encoding:'base64'}, (err) => {
if (err) console.log(err);
console.log("Successfully Written to File.");});
}
[SOLVED]
我用这个找到了解决方案post https://stackoverflow.com/a/36281449/4636906
- 拦截Tabulator的blob对象
downloadReady:function(fileContents, blob){
getBase64(blob);
return blob;
},
- 使用此方法将 blob 转换为 base64 dataUri
function getBase64(file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
// console.log(reader.result);
var xlsxUriString =reader.result;
};
reader.onerror = function (error) {
console.log('Error: ', error);
};
}
Send xlsxUriString
到服务器端(node.js)
将base64转换为文件并保存到本地文件夹
let base64StringXlsx = attachment2;
let base64Xlsx = base64StringXlsx.split(';base64,').pop();
fs.writeFile("D:/testFolder/test.xlsx", base64Xlsx,{encoding:'base64'}, (err) => {
if (err) console.log(err);
console.log("Successfully Written to File xlsx.");
});