Javascript 使用AJAX发布base64编码的PDF文件

Javascript 使用AJAX发布base64编码的PDF文件,javascript,ajax,binary-data,zendesk-api,zendesk-app,Javascript,Ajax,Binary Data,Zendesk Api,Zendesk App,我试图将base64编码的PDF文件发布到Zendesk file upload API端点,但API返回的文件URL显示该文件已损坏 首先,我从一个单独的API调用接收PDF作为base64编码字符串。让我们称之为base64String 如果我打开window.open(“data:application/pdf;base64,+base64String)我可以在浏览器中查看pdf 现在,我正试图遵循通过API上传文件的文档。我可以成功地完成一个cURL调用,如示例所示。但是,jQueryA

我试图将base64编码的PDF文件发布到Zendesk file upload API端点,但API返回的文件URL显示该文件已损坏

首先,我从一个单独的API调用接收PDF作为base64编码字符串。让我们称之为
base64String

如果我打开window.open(“data:application/pdf;base64,+base64String)我可以在浏览器中查看pdf

现在,我正试图遵循通过API上传文件的文档。我可以成功地完成一个cURL调用,如示例所示。但是,jQueryAjax调用将损坏PDF文件

client.request({
url:“/api/v2/uploads.json?filename=test.pdf”,
键入:“POST”,
数据:atob(base64String),
contentType:'应用程序/二进制'
}).then(功能(数据){
window.open(data.upload.attachment.content_url);//损坏的文件
},功能(回应){
log(“未能将文件上载到Zendesk。”);
控制台日志(响应);
});
正如我所说,这将成功,但当我访问
内容\u url
时,PDF不会显示。我很确定文件在
POST
请求中已损坏

我尝试过将文件作为base64字符串上传(没有使用
atob()
)进行解码),但运气不佳

更新

将base64字符串转换为blob后,我仍然无法查看PDF

var blob=base64ToBlob(base64String);
console.log(blob);//Blob{size:39574,键入:“application/pdf”}
client.request({
url:“/api/v2/uploads.json?filename=test.pdf”,
键入:“POST”,
数据:blob,
processData:false,
contentType:'应用程序/pdf'
}).then(功能(数据){
window.open(data.upload.attachment.content_url);//损坏的文件
},功能(回应){
log(“未能将文件上载到Zendesk。”);
控制台日志(响应);
});
函数base64ToBlob(byteString){
//将字符串的字节写入ArrayBuffer
var ab=新阵列缓冲区(byteString.length);
var ia=新的UINT8阵列(ab);
for(var i=0;i
我了解到Zendesk应用程序框架使用jQuery AJAX包装器处理请求,并且不支持arraybuffer类型,因此文件已损坏。应用程序框架团队已经解决了这个问题。

为什么要将
contentType
设置为
应用程序/二进制文件
?如果您查看,他们有那个标题。您是否尝试过用另一种语言处理发送到服务器的POST请求,以确保这是一个客户端问题?这是一个独特的约定,但过去没有给我任何问题。“content\u type string是图像的内容类型。示例值:“content\u type”:“image/png”或,这就是答案吗?您是否尝试过发布完整的
数据URI
,而不是只发布
数据URI
base64
部分
base64String本身不是文件的有效
数据URI
表示形式。“这是一个独特的惯例,但过去没有给我带来任何问题。”你过去有哪些成功的尝试?