在iOS上的Cordova中保存文件不起作用-在Android中很好

伊恩

我有一个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输出窗口中的一条消息,上面写着“写文件完成”,然后另一行写着“在(空)查找文件”。

没有例外或错误,仅此而已。

任何帮助将不胜感激。

用户241244

插件fileOpener2存在iOS的文件名中包含空格已知问题据报道, 您可以decodeURIComponent用来显示受此影响的文件,例如,在这种情况下:

var docUrl = folderpath + filename;

if ( device.platform.toLowerCase() === 'ios' ) { // only change for iOS
  docUrl = decodeURIComponent( docUrl );
}

cordova.plugins.fileOpener2.open(docUrl, 'application/pdf');

保存时,您也可以简单地删除/替换空格。

(此插件也存在非ASCII字符的问题。这里的解决方案可能会有点复杂。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在DownloadManager上下载并在setDestinationInExternalFilesDir()中保存文件在Android 10上不起作用

Cordova InAppBrowser 在 iOS 中不起作用

可以很好地编译但在Codename One中不起作用的本机代码(Android上的隐藏导航栏)

在存储Android中保存文本的权限不起作用

cordova-plugin-camera在IOS中不起作用

Phonegap / Cordova在iOS8中不起作用

INSERT在pymysql中不起作用,但是SELECT很好

ng-cordova createFile()方法(在文件API中)在android设备中不起作用

Cordova Async XMLHttpRequest()。open在Android中不起作用

Cordova Config中的errorUrl在Android上不起作用

replaceAll在Cordova中不起作用

css: top in % 措施在 firefox 中不起作用,但在 chrome 中工作得很好

Git push 在 PhpStorm 中不起作用,而在 Tortoise 中 git 工作得很好

Sublime3的Markdown突出显示在Ubuntu中不起作用(在Windows中效果很好)

Cordova-window.history.back()在iOS 9中的HTML后退按钮上不起作用

在PhoneGap / Cordova中安排本地通知在iOS模拟器上不起作用

为什么jQuery Ajax在Cordova iOS应用中不起作用

如何在S3中保存数据流?aws-sdk-go示例不起作用?

onPress在Android上不触发,但在iOS上很好

Cordova 文件传输插件在模拟器中不起作用

画布中的HTML / Javascript绘制弧不起作用-矩形/线条很好

反应设置值以选择不起作用,但使用选项中的选择很好

MySQL在CTE中设置了一个变量:“选择”很好,但是“设置”不起作用

声音在笔记本电脑扬声器中不起作用。耳机很好

Bootstrap 导航栏页外(非锚点)链接不起作用,但文本中的 href 很好

尝试使用Buffered Writer将文件保存在documents文件夹中不起作用

空editText上的clearFocus()在Android中不起作用

settitle()在按钮clicklistner上的android中不起作用

ID上的setText在android studio中不起作用