将byteArray保存为Titanium中的pdf文件

Zer*_*rho 6 javascript buffer filestream titanium appcelerator

我有一个SOAP API,它返回一个文件,该文件分为几个base64字符串编码的块

我无法将其保存到文件系统而不会破坏它

这是整个文件的pastebin编码,一旦我下载并链接响应.

正确保存的方法是什么?

我试过很多方面

var f = Ti.FileSystem.getFile(Ti.FileSystem.tempDirectory, 'test.pdf');
Run Code Online (Sandbox Code Playgroud)

...

    var blobStream = Ti.Stream.createStream({ source: fileString, mode: Ti.Stream.MODE_READ });
    var newBuffer = Ti.createBuffer({ length: fileString.length });

    f.write(fileString);
Run Code Online (Sandbox Code Playgroud)

要么

    var data = Ti.Utils.base64decode(fileString);

    var blobStream = Ti.Stream.createStream({ source: data, mode: Ti.Stream.MODE_READ });
    var newBuffer = Ti.createBuffer({ length: data.length });
    var bytes = blobStream.read(newBuffer);

    f.write(fileString);
Run Code Online (Sandbox Code Playgroud)

要么

    var data = Ti.Utils.base64decode(fileString);

    var blobStream = Ti.Stream.createStream({ source: data, mode: Ti.Stream.MODE_READ });
    var newBuffer = Ti.createBuffer({ length: data.length });
    var bytes = blobStream.read(newBuffer);

    f.write(bytes);
Run Code Online (Sandbox Code Playgroud)

但我不明白哪一条是正确的道路

我是否必须自己转换回byteArray字符串?保存它的正确方法是什么?

我是否必须从字符串或...创建缓冲区?

小智 1

我认为该文件的 base64enc 无效或不完整,我已经使用 bash 和 base64 utils 对其进行了测试。您可以执行这些步骤。

将 base64 字符串复制并粘贴到名为 pdf.base64 的文件中,然后运行以下命令:

cat pdf.base64 | base64 --decode >> out.pdf
Run Code Online (Sandbox Code Playgroud)

输出文件不是有效的 pdf。

您可以尝试对有效的 pdf 文件进行编码和解码,以查看生成的二进制文件:

cat validfile.pdf | base64 | base64 --decode >> anothervalidfile.pdf
Run Code Online (Sandbox Code Playgroud)

尝试检查你是否正确地链接了块,或者只是与构建soap api 的人打个电话。