我想通过api调用发送内容在服务器上创建pdf文件。
我要做的是:
使用xhr向第三方api发送请求,并获得类似于以下内容的二进制响应:
%PDF-1.4
%ª«¬
1 0 obj
<<
/Title (Resume)
/Author (LinkedIn)
/Subject (Resume generated from profile)
/Producer (Apache FOP Version 2.2)
/CreationDate (D:20190124111323Z)
>>
endobj
2 0 obj
<<
/N 3
/Length 3 0 R
/Filter /FlateDecode
>>
此后,我创建一个具有此内容的对象,在该对象上执行JSON.stringify
,然后通过API POST请求将其发送到我的服务器
在服务器上,我等待请求,从中获取content
并对该数据执行file_put_contents
。
结果是,创建的文件具有正确数量的pdf页,但为空。可能是什么问题?
AJAX请求:
//This request is to the third party api which returns the response
//as shown above and is available in content variable
_this.loadFile((content) => {
var data = {};
data.type = 'application/pdf';
data.ext = 'pdf';
data.content = content;
$.ajax({
url: api_url + '/files',
type: 'POST',
data: JSON.stringify(data),
contentType: "application/json",
success: function(response) {
alert('Done');
},
error: function(response) {
alert('Error');
}
});
});
API请求处理
//Gets the posted data in $data variable
//Content is correct all values are correct
$fileName = 'file-tmp-' . time() . $data['ext'];
$filePath = 'data/' . $fileName;
$content = $resume['content'];
file_put_contents($filePath, $content);
生成该文件后,我可以查看它,pdf的页面数正确,如果我尝试在编辑器中查看该文件,它会显示第三方API请求的内容。
另外,通过第三方网站和第三方API下载的文件内容相同。但是直接下载的文件的内容在其页面中可见,而我在服务器上创建的文件显示空白页面。两种pdf文件都可以被读者打开,而没有任何错误。
我做错了什么?