我有一个cordova应用程序,我在其中下载pdf文件,将其保存在本地,然后将其打开。 在Android上运行正常,但iOS在输出窗口中显示一条消息,表明它已写入文件,但无法打开null文件。
最初,我使用的是cordova.file.externalRootDirectory,它在Android上有效,但在iOS上无效。 我将其更改为cordova.file.dataDirectory,它再次在Android上运行,但在iOS上不工作。
根据我完成的搜索,使用cordova.file.dataDirectory应该在两个平台上都可以工作。
我尝试添加
到配置文件,但这没什么区别。
var contentType = "application/pdf";
var folderpath = cordova.file.dataDirectory;
var filename = filedate + ".pdf";
savebase64AsPDF(folderpath,filename,data,contentType)
function b64toBlob(b64Data, contentType, sliceSize) {
contentType = contentType || '';
sliceSize = sliceSize || 512;
var byteCharacters = atob(b64Data);
var byteArrays = [];
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob = new Blob(byteArrays, {type: contentType});
return blob;
}
function savebase64AsPDF(folderpath,filename,content,contentType){
// Convert the base64 string in a Blob
var DataBlob = b64toBlob(content,contentType);
console.log("Starting to write the file :3");
window.resolveLocalFileSystemURL(folderpath, function(dir) {
console.log("Access to the directory granted succesfully");
dir.getFile(filename, {create:true}, function(file) {
console.log("File created succesfully.");
file.createWriter(function(fileWriter) {
console.log("Writing content to file");
fileWriter.write(DataBlob);
console.log("Finished writing file.");
//open file
cordova.plugins.fileOpener2.open(folderpath + filename, 'application/pdf');
}, function(){
alert('Unable to save file in path '+ folderpath);
});
});
});
}
期望的(和期望的)结果是在Android上发生的事情,因为该文件被保存在本地,然后在默认的pdf阅读器中打开。
从iOS上我能得到的最好的信息是xcode输出窗口中的一条消息,指出其“写入文件已完成”,然后另一行指出“正在(null)查找文件”
没有例外或错误,什么都没有。
任何帮助都会感激不尽。
答案 0 :(得分:0)
插件fileOpener2具有一个known issue with spaces in the filename for iOS。您可以reportedly use decodeURIComponent
来显示受此影响的文件,例如,在这种情况下:
var docUrl = folderpath + filename;
if ( device.platform.toLowerCase() === 'ios' ) { // only change for iOS
docUrl = decodeURIComponent( docUrl );
}
cordova.plugins.fileOpener2.open(docUrl, 'application/pdf');
保存时,您也可以简单地删除/替换空格。
(此插件也存在non-ASCII characters问题。此处的解决方案可以get a little complex。)