[英]Request parameters not read when calling Google Cloud Printing API
[英]Google Cloud Print API - white page when printing PDF
我想使用Google Cloud Print API发送要打印的PDF文件。 下面的代码将给我一个积极的信息,告诉我生成了一个页面。 当我去检查出来的时候,我打开一个空白页面。
如果我在Google云端硬盘上保存打印件,也会出现同样的结果。
unirest.post('https://www.google.com/cloudprint/submit')
.header('Authorization', 'Bearer ' + token)
.header("Accept-Charset", "utf-8")
.field('xsrf', xsrf_token)
.field('printerid', printerId)
.field('ticket', '{"version": "1.0", "print": {}}')
.field('title', 'Test from Simpe.li')
.field('contentType', 'application/pdf')
.attach('content', buffer)
.end(function (res) {
console.log(res);
});
我知道我发送的是PDF,因为我改变了
.field('contentType', 'application/pdf')
至
.field('contentType', 'text/plain')
我将获得53页的文本,这是PDF文件的原始内容。
我做错了什么?
事实证明,Google文档中遗漏了一些关键信息。 要发送二进制类型数据(如PDF),您需要将文件转换为base64。 除此之外,您需要告诉Google您将使用add field contentTransferEncoding
向他们发送base64 blob并将值设置为base64
。
另一件重要的事情 Unirest
存在一个错误(至少对于Unirest
),其中发送base64文件不会设置Content-Size
标头。 甚至没有设置自己将解决问题。 为了避免这个问题,我不得不切换到Request 。 以下代码显示了适用于Google云打印的帖子:
let buffer64 = buffer.toString('base64');
let formData = {
xsrf: xsrf_token,
printerid: printerId,
ticket: '{"version": "1.0"}',
title: 'Test Print',
contentTransferEncoding: 'base64',
contentType: 'application/pdf',
content: buffer64
};
let headersData = {
'Authorization': 'Bearer ' + token
};
request.post({
url: 'https://www.google.com/cloudprint/submit',
headers: headersData,
formData: formData
}, function (err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
});
我希望这会帮助别人:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.